Как мы можем генерировать геттеры и сеттеры в Visual Studio?


226

Под «генерацией» я подразумеваю автоматическую генерацию кода, необходимого для конкретной выбранной (множественной) переменной (ей).

Но любые более явные объяснения или комментарии к хорошей практике приветствуются.

Ответы:


297

Вместо того, чтобы использовать Ctrl+ K, Xвы также можете просто напечатать, propа затем Tabдважды нажать .


70
И не забывайте «propg» + tab, который генерирует то же самое, но с частным сеттером.
Андрей М

См. Msdn.microsoft.com/en-us/library/z41h7fat.aspx для получения более полезных фрагментов кода в Visual C #
Тит

51

Visual Studio также имеет функцию, которая генерирует свойство из закрытой переменной.

Если щелкнуть правой кнопкой мыши переменную, в всплывающем контекстном меню щелкните элемент «Refactor» и выберите « Encapsulate Field» ... . Это создаст свойство getter / setter для переменной.

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


10
К сожалению, этот вариант не предоставляется в экспресс-версиях Visual Studio.
Тоби

12
здесь тоже есть крик - я предпочитаю так :) - CTRL + R + E
Вукасин

32

Я использую Visual Studio 2013 Professional.

  • Поместите курсор на строку переменной экземпляра.

    Введите описание изображения здесь

  • Нажмите комбинированные клавиши Ctrl+ R, Ctrl+ Eили щелкните правой кнопкой мыши. Выберите контекстное меню RefactorEncapsulate Field ... , а затем нажмите OK.

    Введите описание изображения здесь

  • В диалоговом окне « Просмотр изменений ссылок - Инкапсулировать поле » нажмите кнопку Apply.

    Введите описание изображения здесь

  • Это результат:

    Введите описание изображения здесь



Вы также помещаете курсор для выбора свойства . Используйте меню EditRefactorEncapsulate Field ...


30

Под генерацией вы подразумеваете автоматическую генерацию? Если это не то, что вы имеете в виду:

Visual Studio 2008 имеет простейшую реализацию для этого:

public PropertyType PropertyName { get; set; }

В фоновом режиме это создает подразумеваемую переменную экземпляра, в которой хранится и восстанавливается ваше свойство.

Однако, если вы хотите добавить больше логики в свои свойства, вам понадобится переменная экземпляра:

private PropertyType _property;

public PropertyType PropertyName
{
    get
    {
        //logic here 
        return _property;
    }
    set
    {
        //logic here
        _property = value;
    }
 }

В предыдущих версиях Visual Studio этот метод всегда также использовался.


Разве стандарт в C # не является нижней чертой после имени члена, property_а не до _property?
Julen

2
@Julen - Я всегда видел соглашение об имущественных правах.
Натан ДеВитт

27

Вы также можете использовать «propfull» и TABдважды ударить .

Переменная и свойство с get и set будут сгенерированы.


это более полезный, и я всегда забываю об этом
Дейв Альперович

Я делаю сериализацию XML и порождаю множество свойств по всему шоу. + 100septillion против, если бы я мог. Спасибо! Редактировать - ДАЖЕ ЛУЧШЕ, скрипт autohotkey + ^ это = производительность более 90000!
Эон


6

Если вы используете Visual Studio 2005 и выше, вы можете очень быстро создать установщик / получатель, используя команду вставки фрагмента.

Щелкните правой кнопкой мыши свой код, нажмите Вставить фрагмент ( Ctrl+ K, X), а затем выберите «Пропеллер» из списка.


4

Если вы используете ReSharper, перейдите в меню ReSharper → КодСоздать ...

(Или нажмите Alt+ Insвнутри окружающего класса), и вы получите все варианты генерации геттеров и / или сеттеров, о которых вы только можете подумать :-)


3

Используйте propfullключевое слово.

Это сгенерирует свойство и переменную.

Введите ключевое слово propfullв редакторе, а затем два TABс. Это сгенерирует код как:

private data_type var_name;

public data_type var_name1{ get;set;}

Видео, демонстрирующее использование сниппета «propfull» (помимо прочего), в 4 минуты 11 секунд.


2
пожалуйста, предоставьте больше информации о вашем ответе, ответы с кратким описанием не
подходят

введите ключевое слово propfull в редакторе, он сгенерирует код, подобный закрытому типу данных var_name; public data_type var_name1 {get; set;}
avinash kadu

Можете ли вы добавить ссылку на «propfull» ( редактируя свой ответ , а не здесь, в комментариях)?
Питер Мортенсен

3

Я создал свой собственный фрагмент, который только добавляет {get; set;}. Я сделал это только потому, что нахожу propTabнеуклюжим.

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>get set</Title>
            <Shortcut>get</Shortcut>
        </Header>
        <Snippet>
            <Code Language="CSharp">
                <![CDATA[{get; set;}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

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


2

В Visual Studio Community Edition 2015 вы можете выбрать все необходимые поля, а затем нажать Ctrl+, .чтобы автоматически сгенерировать свойства.

Вы должны выбрать, хотите ли вы использовать свойство вместо поля или нет.


1

В дополнение к фрагменту prop и авто-свойствам, существует опция рефакторинга, позволяющая выбрать существующее поле и открыть его через свойство ( щелкните правой кнопкой мыши поле → RefactorEncapsulate Field ... ).

Также, если вам не нравится реализация «prop», вы можете создавать свои собственные фрагменты. Кроме того, сторонний инструмент рефакторинга, такой как ReSharper , предоставит вам еще больше возможностей и упростит создание более сложных фрагментов. Я бы порекомендовал ReSharper, если вы можете себе это позволить.


Первая ссылка перенаправляет на документацию Visual Studio 2005 Retired . К какому из десяти это относится? Предположительно, это описание того, как использовать фрагменты в Visual Studio.
Питер Мортенсен

1

В visual studio 2019 выберите ваши свойства следующим образом:

введите описание изображения здесь

Затем нажмите Ctrl+r Затем нажмитеCtrl+e

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


0

У меня больше нет установленной Visual Studio (и я использую Linux), но я помню, что где-то внутри меню было спрятан мастер, который давал доступ к построителю классов.

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

Я знаю, что это довольно расплывчато, но проверьте это, и вы можете найти это.



0

Сначала получите Extension, просто нажмите ( Ctrl+ Shift+ X) и установите установщик геттера ....

После этого просто выберите вашу переменную и щелкните правой кнопкой мыши. Перейти к палитре команд ...

И введите getter ... Он предложит генерировать методы get и set. Нажмите на это ...


1
Что вы подразумеваете под «Сначала получите расширение» ?
Питер Мортенсен

В каком контексте следует нажимать Ctrl + Shift + X?
Питер Мортенсен

-4

Вы просто нажимаете Alt+ Insв Android Studio.

После объявления переменных вы получите методы получения и установки в сгенерированном коде.


Никто не спрашивал про андроид студию
warzone_fz

Вопрос «Как мы можем генерировать геттеры и сеттеры в Visual Studio?» , Visual Studio - это не то же самое, что Android Studio .
Питер Мортенсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.