Як ми можемо генерувати геттери та сетери в Visual Studio?


226

Під "генеруванням" я маю на увазі автоматичне генерування коду, необхідного для певної вибраної (набору) змінних.

Але будь-яке більш чітке пояснення чи коментар щодо належної практики вітається.

Відповіді:


297

Замість того, щоб використовувати Ctrl+ K, Xви також можете просто ввести propта Tabдвічі натиснути .


70
І не забувайте "propg" + вкладка, яка генерує те саме, але з приватним сетером.
Ендрю М

Дивіться msdn.microsoft.com/en-us/library/z41h7fat.aspx для більш корисних фрагментів коду у Visual C #
Titus

51

У Visual Studio також є функція, яка генерує властивість із приватної змінної.

Якщо ви клацніть правою кнопкою миші на змінній, у контекстному меню, що з'являється, клацніть на пункт "Refactor" і виберіть поле "Encapsulate ..." . Це створить властивість getter / setter для змінної.

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


10
На жаль, ця опція не надається експрес-виданнями Visual Studio.
Тобі

12
є і shourtcut - я позначаю так :) - CTRL + R + E
Vukasin

32

Я використовую Visual Studio 2013 Professional.

  • Розташуйте курсор у рядку змінної примірника.

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

  • Натисніть комбіновані клавіші Ctrl+ R, Ctrl+ Eабо натисніть праву кнопку миші. Виберіть контекстне меню RefactorEncapsulate Field ... і натисніть OK.

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

  • У розділі " Попередній перегляд змін змін" - діалогове вікно " Інкапсулювати поле" натисніть кнопку Apply.

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

  • Це результат:

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



Ви також розміщуєте курсор для вибору властивості . Використовуйте меню РедагуватиРефакторІнкапсулювати поле ...


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?
Джулен

2
@Julen - Я завжди бачив конвенцію _property.
Натан Девітт

27

Ви також можете використовувати "профул" і натиснути TAB двічі .

Буде згенерована змінна та властивість get і set.


це більш корисне, і я завжди його забуваю
Дейв Альперович,

Я роблю серіалізацію XML і нересурсив багато властивостей упродовж шоу. + 100septillion підсилює, якщо я міг. Дякую! Редагувати - НАЙКРАЩЕ, сценарій автоматичної клавіші + ^ це = продуктивність понад 90000!
Eon


6

Якщо ви використовуєте Visual Studio 2005 і новіших версій, ви можете створити сеттер / геттер реально швидко, використовуючи команду вставити фрагмент.

Клацніть правою кнопкою миші свій код, клацніть на Вставити фрагмент ( Ctrl+ K, X), а потім виберіть зі списку "Підтримка".


4

Якщо ви використовуєте ReSharper, перейдіть до меню ReSharper → КодСтворити ...

(Або натисніть Alt+ Insвсередині навколишнього класу), і ви отримаєте всі варіанти створення гетерів та / або сетерів, про які ви можете придумати :-)


3

Використовуйте propfullключове слово.

Він буде генерувати властивість та змінну.

Введіть ключове слово propfullв редактор, а потім два TABs. Він генерує код типу:

private data_type var_name;

public data_type var_name1{ get;set;}

Відео, що демонструє використання фрагмента "propfull" (серед іншого), за 4 хв 11 сек.


2
будь ласка, надайте більше інформації про свою відповідь, відповіді з коротким описом не підходить для наступних відвідувачів ...
Kiyarash

введіть ключове слово в режимі редактора, він генерує код, як приватний тип_файлу var_name; public data_type var_name1 {get; set;}
avinash kadu

Чи можете ви додати посилання на "профул" ( відредагувавши свою відповідь , а не тут у коментарях)?
Пітер Мортенсен

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, і він додасть набір get. Це нічого не магічного, але оскільки я, як правило, спочатку набираю модифікатор доступу, я можу також дописати ім'я та тип.


2

У Visual Studio Community Edition 2015 ви можете вибрати всі потрібні поля, а потім натиснути Ctrl+, .щоб автоматично генерувати властивості.

Ви повинні вибрати, чи хочете ви використовувати властивість замість поля чи ні.


1

На додаток до фрагменту "prop" та автоматичних властивостей, існує можливість рефактора, який дозволяє вам вибрати існуюче поле та відкрити його через властивість ( клацніть правою кнопкою миші на полі → RefactorEncapsulate Field ... ).

Крім того, якщо вам не подобається реалізація "опори", ви можете створити власні фрагменти. Крім того, сторонній інструмент рефакторингу, як ReSharper , надасть вам ще більше функцій та полегшить створення більш просунутих фрагментів. Я рекомендую ReSharper, якщо ви можете собі це дозволити.


Перше посилання перенаправляє на документацію Visual Studio 2005 пенсіонерів . На кого з десяти це стосувалося? Імовірно, це опис того, як використовувати фрагменти у Visual Studio.
Пітер Мортенсен

1

У візуальній студії 2019 виберіть такі властивості, як цей:

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

Потім натисніть Ctrl+r і натиснітьCtrl+e

З'явиться діалогове вікно, на якому буде показано попередній перегляд змін, які будуть внесені у ваш код. Якщо все виглядає добре (що в основному буде), натисніть OK.


0

У мене на моїй машині більше не встановлена ​​Visual Studio (і я використовую Linux), але я пам’ятаю, що десь в одному з меню був майстер, який давав доступ до конструктора класів.

За допомогою цього майстра ви можете визначити всі деталі своїх класів, включаючи методи та атрибути. Якщо я добре пам’ятаю, був варіант, за допомогою якого ви могли попросити Visual Studio автоматично створити сетери та геттери.

Я знаю, що це зовсім невиразно, але перевіри це, і ти можеш його знайти.


0

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

Від імені інструмента Visual Studio ми можемо легко генерувати властивості C # за допомогою онлайн-інструменту під назвою C # generator.


3
непотрібна функція
SeReGa

0

Спочатку отримайте розширення, просто натисніть ( Ctrl+ Shift+X ) та встановіть геттер-сетер ....

Після цього просто виберіть змінну і клацніть правою кнопкою миші. Перейти до палітри команд ...

І введіть getter ... Він пропонує запропонувати методи отримання та встановлення. Натисніть на це ...


1
Що ви маєте на увазі під "першим отримати розширення" ?
Пітер Мортенсен

У якому контексті слід натиснути Ctrl + Shift + X?
Пітер Мортенсен

-4

Ви просто натисніть Alt+ Insв студії Android.

Після оголошення змінних, ви отримаєте геттери та сеттери в згенерованому коді.


Ніхто не питав про андроїд-студії
warzone_fz

Питання "Як ми можемо генерувати геттери та сетери в Visual Studio?" . Visual Studio - це не те саме, що Android Studio .
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.