Как копировать классы visual studio

Обновлено: 07.07.2024

class Book
<
public string Name;
>

class Program
<
static void Main( string [] args)
<
Book b1 = new Book();
b1.name = "Book1";

Book b2 = b1; // b2 содержит ссылку на b1 поэтому:
// меняя b2.Name меняется и b1.Name
// если поменяем b1.Name то поменяется и b2.Name
b2.Name = "Book2";

Чтобы скопировать данные класса , а не ссылку есть 2 варианта:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
<
class Book: ICloneable
<
public string Name;

class Program
<
static void Main(string[] args)
<
Book b1 = new Book();
b1.Name = "Book1";

Book b2 = (Book)b1.Clone();
b2.Name = "Book2";

Вариант 2 Использовать специальный метод MemberwiseClone()

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
<
class Book: ICloneable
<
public string Name;

public object Clone()
<
return this .MemberwiseClone();
>
>

class Program
<
static void Main( string [] args)
<
Book b1 = new Book();
b1.Name = "Book1";

Book b2 = (Book)b1.Clone();
b2.Name = "Book2";

Этот метод реализует поверхностное (неглубокое) копирование.
Объекты 2-ого уровня не скопируются (будут содержать ссылку)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
<
class Author
<
public int Age < get; set; >
>

class Book: ICloneable
<
public string Name < get; set; >
public Author Author

public object Clone()
<
return this .MemberwiseClone();
>
>

class Program
<
static void Main( string [] args)
<
Book b1 = new Book();
b1.Name = "Book1";
b1.Author = new Author() < Age = 38 >;

Book b2 = (Book)b1.Clone();
b2.Name = "Book2";
b2.Author.Age = 42;

// b1.name "Book1" b1.Author.Age 42
// b2.name "Book2" b2.Author.Age 42
>
>
>

Поверхностное копирование работает только для свойств, представляющих примитивные типы , но не для вложенных объектов.
Чтобы работало копирование для вложенных объектов надо применять глубокое копирование:

class Author
<
public int Age < get; set; >
>

class Book: ICloneable
<
public string Name < get; set; >
public Author Author

В режиме отладки Visual Studio можно навести курсор на переменные, чтобы показать их значение, а затем щелкнуть правой кнопкой мыши на "Копировать", "Копировать выражение" или "Копировать значение".

Если переменная является объектом, а не только базовым типом, есть знак + для расширения и изучения объекта. Есть ли способ скопировать все это в буфер обмена?

ОТВЕТЫ

Ответ 1

В ближайшем окне введите

Это будет распечатывать все, и вы можете вручную скопировать его в любом месте, или использовать непосредственные функции ведения журнала окна, чтобы автоматически записать его в файл.

UPDATE: Я предполагаю, что вы спрашивали, как копировать/вставлять вложенную структуру значений, чтобы вы могли либо искать ее по тексту, либо чтобы вы могли сохранить ее на стороне, а затем сравнить состояние объекта с ней. Если я прав, вы можете проверить коммерческое расширение Visual Studio, которое я создал, называемое OzCode, которое позволяет вам делать это гораздо легче с помощью функций "Поиск" и "Сравнить".

Полное раскрытие: я являюсь соавтором инструмента, который я описал здесь.

Ответ 2

Вы можете запустить ниже код в непосредственном окне и экспортировать в XML файл сериализованное XML-представление объекта:

Ответ 3

Существует последнее расширение Object Exporter, которое делает это удобно.

Ответ 4

Не совсем то, о чем вы спрашиваете, но можете добавить часы для этого объекта, а в окне просмотра разверните и выберите все, что вы хотите скопировать, а затем скопируйте.

Ответ 5

Используя атрибуты чтобы украсить ваши классы и методы, вы можете получить определенное значение на дисплее объекта во время отладки с помощью атрибут DebuggerDisplay, например

Ответ 6

Я знаю вопрос, заданный конкретно об информации из отладчика, но ObjectDumper дает информацию, которая в основном такая же. Я предполагаю, что те, у кого этот вопрос, похожи на меня, и просто нуждаются в данных для целей отладки и не заботятся, технически ли они получены от отладчика или нет.

Ответ 7

Я всегда использую:

Затем я копирую строковое значение, которое, к сожалению, также копирует обратные косые черты.

Затем в элементе <p >Visit Microsoft!</p> замените текст на скопированный текст. затем замените var res = str.replace("Microsoft", "W3Schools"); линия с

Запустите эти новые изменения, но не забудьте нажать кнопку "попробуйте" справа.

Ответ 8

Я знаю, что немного опоздал на вечеринку, но я написал реализацию JSON для сериализации объекта, если вы предпочитаете выводить JSON. Использует ссылку Newtonsoft.Json.

Ответ 9

Ответ 10

если у вас есть список, и вы хотите найти определенную переменную: В ближайшем окне введите

если это возвращает true

Ответ 11

Я только что щелкнул правой кнопкой мыши по переменной и выбрал AddWatch, который откроет окно просмотра, которое состоит из всех значений. Я выделил все и вставил в текстовый редактор, вот и все.

обычно я копирую файлы в проводнике windows, открываю их в блокноте / Wordpad и просто меняю одно упоминание имени класса вверху. Включите эти файлы в свой проект, и вам будет хорошо идти.

  1. скопируйте и вставьте форму.
  2. переименовать вставленную форму .cs, чтобы соответствовать новому имени класса формы. Это должно автоматически переименовывать другие связанные файлы.
  3. открыть .cs файл. Измените имя класса и имя конструктора(конструкторов) и деструктора.
  4. открыть .Дизайнер.cs-файл и измените имя класса.
  1. рассмотрите возможность абстрагирования общей функциональности из формы в общую форму или контроли.

обеспеченный путь без проблем сделать шаблон формы Вы можете использовать его в том же проекте или любом другом проекте. и вы можете добавить его очень легко, например, добавив новую форму . Вот способ, как сделать шаблон

1 - с меню нажмите кнопку Экспорт Шаблона

2-Выберите тип шаблона (выберите пункт шаблон) и нажмите кнопку Далее

3-Проверьте форму, которую вы хотите сделать шаблоном, и нажмите кнопку Далее два раза

4-переименуйте шаблон и (поместите описание, выберите значок изображения, предварительный просмотр изображения, если хотите)

теперь вы можете добавить новый элемент и выбрать шаблон в любом проекте

прежде всего, если вы дублируете много форм с помощью cut и paste, рассмотрите общий базовый класс для ваших форм (или для категории ваших форм), который реализует общие/общие функциональные возможности или элементы look & feel. Можно также создать шаблон для новых форм, отвечающих вашим потребностям, и создать новые формы из этого шаблона.

  1. Добавить папку в проект.
  2. щелкните правой кнопкой мыши на папку и выберите команду добавить существующий элемент.
  3. перейдите к форме вы хотите скопировать, и выберите его .cs файл. Это будет дублировать исходную форму (частичную и resx и все) в подпапке. Имя не будет конфликтовать с оригиналом, так как подпапка будет включена в пространство имен.
  4. щелкните правой кнопкой мыши на .cs-файл, нажмите Refactor / Rename и введите новое имя. Этот также переименует частичный и resx для вас.

Я вообще не люблю методы этого, которые включают в себя открытие файлов в блокноте или что-то еще, так как я всегда думаю, что общая задача, как это должно иметь встроенный способ сделать это в Visual Studio. В данном случае есть.

  1. щелкните правой кнопкой мыши на форме -> копировать класс

enter image description here

  1. щелкните правой кнопкой мыши папку назначения и вставьте класс

enter image description here

  1. переименуйте новую форму и скажите " да " переименованию всех ссылок на этот класс.

enter image description here

просто переименуйте класс ссылки конструктора.

но лучшим решением является создание нового экземпляра того же класса во время выполнения.

или еще лучше, создайте родительскую форму, от которой наследуются различные реализации.

1.Добавьте новую папку в свой проект

2.Скопируйте форму в это

3.Измените имя в свойствах, а также измените имя файла

4.Проверьте каждую форму для их имени класса (они не должны быть одинаковыми)

используя VS2013 только что протестировал это, и он кажется надежным и последовательным. Это похоже на некоторые комментарии выше, но добавляет другой метод, который быстрее.

(1-й) в Проводнике файлов Windows Выделите и скопируйте все 3 файла формы (.vb or .цезий. ,проектировщик. ,resx файл)

(2-ой) это может быть достигнуто 2 способами:

(2a-1) В Проводнике вставить 3 файла в папку проекта с другими формами

(2a-2) в VS Solution Explorer включите "показать все файлы", щелкните правой кнопкой мыши на вставленной форме и "включить в проект". Он должен работать без изменений.

или, я думаю, что лучше:

(2b-1) в VS щелкните в обозревателе решений и вставьте w / Control-C. (По какой-то причине контекстное меню правой кнопки мыши в обозревателе решений может не отображать параметр вставки, но он работает с клавиатуры.) Этот метод добавляет форму непосредственно в проект без необходимости "включать в проект", как указано выше. С помощью этого метода вы можете добавить столько форм в то время, как вам нравится (все 3 файла для каждого) в один шаг.

  • сохранить весь проект
  • щелкните правой кнопкой мыши в обозревателе решений (SE), "копировать"
  • щелкните правой кнопкой мыши имя проекта в SE (это первая строка), "вставить". Он создаст " копию . ВБ" форма
  • щелкните правой кнопкой мыши на этой новой форме в SE, "View code", и измените ее имя класса на имя, которое вы хотите использовать для формы
  • щелкните левой кнопкой мыши на новой форме в SE и перепишите ее имя для той, которую вы использовали в имени класса (и .vb в конце концов)
  • Build-если у него нет ошибки, вы выигрываете! :)

Я использую другой способ копирования форм с vb6.

  1. меню Файл / SE-сохранить CurrentForm.cs as-NewForm.cs
  2. измените его имя на NewForm в окне свойств.
  3. В Обозревателе Решений-Добавить Существующий Элемент-CurrentForm.cs
  4. обычно в форме MDI (где упоминается CurrentForm) - событие CurrentFormToolStripMenuItem_Click-изменить ссылку на CurrentForm (которая автоматически изменяется на NewForm в шаге 1).

Это Действительно Легко. "В режиме проектирования форма "(form1.cs[Design]) скопируйте всю форму "ctrl A", затем ctrl C. Все объекты сразу. Затем добавьте в проект новую форму windows form. Измените размер формы на нужный размер, затем вставьте ctrl V все новые объекты будут скопированы в новую форму. Когда они все еще выбраны, дважды щелкните по любому из объектов. НЕ ФОРМА. Это создаст код на стороне формы, соответствующий только что вставленным объектам. если это не вы можно дважды щелкнуть по каждому объекту, и он создаст код по одному за раз. Я использую область текстового поля для двойного щелчка, и он работает почти каждый раз. Я использую этот метод каждый день отлично работает.

Обычно я копирую файлы в проводнике Windows, открываю их в Блокноте / Wordpad и просто меняю одно упоминание имени класса вверху. Включите эти файлы в свой проект, и все будет хорошо.

Безопасный способ без проблем - сделать Шаблон вашей формы. Вы можете использовать его в том же проекте или в любом другом проекте. и вы можете очень легко добавить его, например, добавив новую форму. Вот как сделать Шаблон

1. В меню Файл нажмите Экспорт шаблона .

2- Выберите тип шаблона (выберите шаблон элемента) и нажмите «Далее».

3-Отметьте форму, которую вы хотите сделать ее шаблоном, и нажмите "Далее" Дважды .

4-Переименуйте свой шаблон и (введите описание, выберите изображение значка, изображение для предварительного просмотра, если хотите)

Готово в 5 кликов

Теперь вы можете добавить новый элемент и выбрать свой шаблон в любом проекте.

  1. Добавьте подпапку в свой проект.
  2. Щелкните правой кнопкой мыши подпапку и выберите Добавить существующий элемент.
  3. Перейдите к форме, которую вы хотите скопировать, и выберите ее файл .cs. Это будет дублировать исходную форму (частичную и resx и все) в подпапке. Имя не будет конфликтовать с оригиналом, потому что подпапка будет включена в ее пространство имен.
  4. Щелкните правой кнопкой мыши файл .cs, выберите Refactor | Переименуйте и введите новое имя. Это также переименует партиал и resx для вас.

Я вообще не люблю методы делать это, которые включают открытие файлов в блокноте или где-то еще, так как я всегда думаю, что такая общая задача должна иметь встроенный способ сделать это в Visual Studio. В этом случае есть.

Еще с vb6 я использую другой способ копирования форм.

  1. File Menu / SE - Сохранить CurrentForm.cs как - NewForm.cs
  2. Измените его имя на NewForm в окне свойств.
  3. В обозревателе решений - Добавить существующий элемент - CurrentForm.cs
  4. Обычно в форме MDI (где упоминается CurrentForm) - событие CurrentFormToolStripMenuItem_Click - измените ссылку обратно на CurrentForm (которая автоматически изменяется на NewForm на шаге 1).

Прежде всего, если вы дублируете множество форм с помощью вырезания и вставки, рассмотрите общий базовый класс для ваших форм (или для категории ваших форм), который реализует общие / общие функции или элементы внешнего вида. Вы также можете создать шаблон для новых форм, которые соответствуют вашим потребностям, и создавать новые формы на основе этого шаблона.

Лично я просто вырезал и вставлял, а затем исправлял все оставшиеся ошибки имен. Поскольку я абстрагирую общие функции, я не чувствовал достаточно боли, чтобы искать лучший способ ;-)

  1. Щелкните правой кнопкой мыши на форме -> Копировать класс

enter image description here

  1. Щелкните правой кнопкой мыши папку назначения и вставьте класс

enter image description here

  1. Переименуйте новую форму и скажите «да» переименованию всех ссылок на этот класс.

enter image description here

Если вы работаете в VS 2019, потратьте несколько минут на создание шаблона элемента - это идеальное решение. Как: создавать шаблоны предметов

Не уверен, применимо ли это к более ранним версиям VS.

Просто переименуйте класс, на который ссылается дизайнер.

Но лучшее решение - создать новый экземпляр того же класса во время выполнения.

Или, еще лучше, создайте родительскую форму, от которой наследуются различные реализации.

1. Добавьте новую папку в свой проект

2. скопируйте форму в это

3.Измените имя в свойствах, а также измените имя файла

4. проверьте каждую форму на предмет имени класса (они не должны быть одинаковыми).

Использование VS2013 только что проверило это, и оно кажется надежным и последовательным. Это похоже на некоторые комментарии выше, но добавляет еще один более быстрый метод.

(1-й) . В проводнике Windows выделите и скопируйте все 3 файла формы (.vb или .cs, .designer, .resx).

(2-й) Это можно сделать двумя способами:

(2a-1) В проводнике вставьте 3 файла в папку проекта вместе с другими формами.

(2a-2) В обозревателе решений VS включите «Показать все файлы», щелкните правой кнопкой мыши вставленную форму и «Включить в проект». Он должен работать без других изменений.

Или, мне кажется, лучше:

(2b-1) В VS щелкните в обозревателе решений и вставьте w / Control-C. (По какой-то причине контекстное меню, вызываемое щелчком правой кнопкой мыши в обозревателе решений, может не отображать параметр вставки, но он работает с клавиатуры.) Этот метод добавляет форму в проект напрямую, без необходимости «Включить в проект», как указано выше. С помощью этого метода вы можете добавить столько форм за раз, сколько захотите (все 3 файла для каждой) за один шаг.

Это действительно просто. «В режиме дизайна FORM» (form1.cs [Design]) скопируйте всю форму «ctrl A», затем ctrl C. Все объекты сразу. Затем добавьте в проект новую форму окна. Измените размер формы на нужный, затем вставьте ctrl V, все новые объекты будут скопированы в новую форму. Когда они все еще выбраны, дважды щелкните любой из объектов. НЕ ФОРМА . . Это создаст код на стороне формы, соответствующий только что вставленным объектам. если это не так, вы можете дважды щелкнуть по каждому объекту, и он будет создавать код по одному. Я использую область текстового поля для двойного щелчка, и это срабатывает почти каждый раз. Я использую этот метод каждый день. РАБОТАЕТ ОТЛИЧНО.

Читайте также: