Я привык ко многим из Java IDE ( Eclipse , NetBeans и IntelliJ IDEA ), предоставляющим вам команду для создания конструктора по умолчанию для класса на основе полей в классе.
Например:
public class Example
{
public decimal MyNumber { get; set; }
public string Description { get; set; }
public int SomeInteger { get; set; }
// ↓↓↓ This is what I want generated ↓↓↓
public Example(decimal myNumber, string description, int someInteger)
{
MyNumber = myNumber;
Description = description;
SomeInteger = someInteger;
}
}
Наличие конструктора, заполняющего все поля объекта, является такой распространенной задачей в большинстве языков ООП, и я предполагаю, что у меня есть некоторый способ сэкономить время на написание этого стандартного кода на C #. Я новичок в мире C #, так что мне интересно, упустил ли я что-то фундаментальное из этого языка? Есть ли какая-то опция в Visual Studio, которая очевидна?
В Visual Studio 2015 Update3 у меня есть эта функция.
Просто выделив свойства, затем нажмите Ctrl+, .а затем нажмите Generate Constructor .
Например, если вы выделили два свойства, вам будет предложено создать конструктор с двумя параметрами, а если вы выбрали три, он предложит одно с тремя параметрами и так далее.
Это также работает с Visual Studio 2017.
источник
public int Age { get; }
) Они должны быть указаны в установщиках, даже если они временно, чтобы опция была доступна. Протестировано в сообществе VS2015; не уверен, что это было исправлено в VS2017.C # добавил новую функцию в Visual Studio 2010, которая называется генерировать из использования. Цель состоит в том, чтобы сгенерировать стандартный код из шаблона использования. Одной из особенностей является генерация конструктора на основе шаблона инициализации.
Функция доступна через смарт-тег, который появится при обнаружении шаблона.
Например, допустим, у меня есть следующий класс
И я пишу следующее в моем приложении
Принимая конструктор
int
, не существует, поэтому будет отображаться смарт-тег, и одним из параметров будет «Создать заглушку конструктора». Выбор, который изменит код,MyType
будет следующим.источник
Вы могли бы написать макрос для этого - вы бы использовали синтаксический анализатор Visual Studio для получения информации о членах класса.
Я написал похожий макрос. (Я поделюсь кодом ниже). Макрос, который я написал, предназначен для копирования всех конструкторов базового класса, когда вы наследуете его (полезно для таких классов, как Exception, которые имеют много перегрузок в ctor).
Вот мой макрос (опять же, он не решает вашу проблему, но вы, вероятно, можете изменить, чтобы сделать то, что вы хотите)
источник
Начиная с Visual Studio 2017 это выглядит как встроенная функция. Нажмите Ctrl+, .когда курсор находится в теле класса, и выберите «Создать конструктор» в раскрывающемся списке « Быстрые действия и рефакторинги» .
источник
Вот макрос, который я использую для этой цели. Он сгенерирует конструктор из полей и свойств, которые имеют частный установщик.
источник
Может быть, вы могли бы попробовать это: http://cometaddin.codeplex.com/
источник
Вы можете сделать это легко с помощью ReSharper 8 или более поздней версии.
ctorf
,ctorp
Иctorfp
сниппет генерировать конструктор , которые заполняют все поля, свойство или поля и свойство класса.источник
Вот макрос Visual Studio JMarsh, модифицированный для генерации конструктора на основе полей и свойств в классе.
источник
Для Visual Studio 2015 я нашел расширение которое делает именно это. Кажется, он работает хорошо и имеет достаточно большое количество загрузок. Так что если вы не можете или не хотите использовать ReSharper, вы можете установить его вместо этого.
Вы также можете приобрести его через NuGet .
источник
Я использую следующий трюк:
Я выбираю объявление класса с данными-членами и нажимаю:
Ctrl+ C, Shift+ Ctrl+ C, Ctrl+ V.
ПРОГРАММА получает объявление из буфера обмена, находит имя класса, находит все члены и их типы, генерирует конструктор и копирует все это обратно в буфер обмена.
Мы делаем это с первокурсниками на моей практике "Программирование-I" (Карлов университет, Прага), и большинство студентов делают это до конца часа.
Если вы хотите увидеть исходный код, дайте мне знать.
источник