Я изучаю ASP.NET MVC и могу читать английские документы, но я не совсем понимаю, что происходит в этом коде:
public class Genre
{
public string Name { get; set; }
}
Что это значит: { get; set; }
?
c#
properties
kn3l
источник
источник
{get; set;}
вы создаете поле, но если вы ставите,{get; set;}
вы создаете свойство . Наличие свойства может облегчить некоторые вещи, особенно при работе с Reflection.Ответы:
Это так называемое свойство auto, которое по сути является сокращением для следующего (подобный код будет сгенерирован компилятором):
источник
=
оператор, но только для одного конкретного элемента, верно?name
не создается. Если вы попытались обратиться к этой закрытой переменной внутри класса, она потерпит неудачу. Я не уверен, как это делает C #, но он ведет себя так, как будто есть закрытая переменная без имени, к которой вы не можете получить доступ в своем коде.Итак, насколько я понимаю, это
{ get; set; }
«автоматическое свойство», которое, как сказали @Klaus и @Brandon, является условным обозначением для написания свойства с «вспомогательным полем». Итак, в этом случае:Однако, если вы похожи на меня - примерно час назад - вы не совсем понимаете, что такое свойства и средства доступа , и у вас нет лучшего понимания некоторых основных терминов. MSDN - отличный инструмент для изучения подобных вещей, но его не всегда легко понять новичкам. Поэтому я попытаюсь объяснить это более подробно здесь.
get
иset
являются аксессорами , то есть они могут получать доступ к данным и информации в частных полях (обычно из вспомогательного поля ) и, как правило, делают это из открытых свойств (как вы можете видеть в приведенном выше примере).Нельзя отрицать, что приведенное выше утверждение довольно запутанно, поэтому давайте рассмотрим несколько примеров. Допустим, этот код относится к жанрам музыки. Так что в классе Жанр мы будем хотеть разные жанры музыки. Допустим, мы хотим иметь 3 жанра: хип-хоп, рок и кантри. Для этого мы будем использовать имя класса для создания новых экземпляров этого класса.
Теперь, когда мы создали экземпляры класса Genre, мы можем установить названия жанров, используя свойство 'Name', которое было установлено выше.
Мы можем установить имя 'g1' на хип-хоп, написав следующее
То, что здесь происходит, довольно сложно. Как я уже говорил ранее,
get
иset
доступ к информации из частных полей, которые вы не смогли бы получить в противном случае.get
может только прочитать информацию из этого частного поля и вернуть ее.set
может только написать информацию в этом частном поле. Но имея свойство с обоими,get
иset
мы можем выполнять обе эти функции. И, написав,g1.Name = "Hip Hop";
мы специально используемset
функцию из нашего свойства Nameset
использует неявную переменную с именемvalue
. По сути, это означает, что каждый раз, когда вы видите «значение» внутриset
, оно ссылается на переменную; переменная «значение». Когда мы пишем,g1.Name =
мы используем=
для передачиvalue
переменную, которая в этом случае"Hip Hop"
. Таким образом, вы можете по существу думать об этом так:Важно отметить, что приведенный выше пример на самом деле не написан в коде. Это скорее гипотетический код, который представляет то, что происходит в фоновом режиме.
Итак, теперь, когда мы установили имя экземпляра жанра g1 , я думаю, что мы можем получить имя, написав
и если мы запустим это, мы попадем
"Hip Hop"
в нашу консоль.Таким образом, для целей этого объяснения я также дополню пример выводами.
Вывод:
источник
set{name = value;} // 'value' here is equal to "Hip Hop"
get
иset
методами. Ссылка, которую я предоставил, содержит отличную цитату Джона Гуттага в верхней части страницы. Я бы порекомендовал прочитать его книгу или даже пройти этот бесплатный онлайн-курсpublic class Genre{public string Name;}
вместо:public class Genre{ public string Name { get; set; }}
. Я имею в виду, зачем нам вообще нужно набор; }?Это автоматические свойства
В основном, другой способ написания свойства с помощью вспомогательного поля.
источник
get
и сохраняется при использованииset
). Как шкаф, к которомуget
иset
открывается дверь._name
. В автоматическом свойстве поле поддержки скрыто.Это короткий способ сделать это:
источник
Это быстрый способ выставить элементы данных как общедоступные, так что вам не нужно явно создавать частные элементы данных. C # создаст для вас личный элемент данных.
Вы можете просто сделать ваши элементы данных общедоступными, не используя этот ярлык, но тогда, если вы решите изменить реализацию элемента данных, чтобы иметь некоторую логику, вам придется сломать интерфейс. Короче говоря, это ярлык для создания более гибкого кода.
источник
По сути, это ярлык:
источник
Это автоматически реализованное свойство для C #.
источник
get; set;
вызове?null
как любаяstring
переменная доsomeInstanceOfGenere.Name = "someValue"
Они являются доступными для имени публичной собственности.
Вы бы использовали их, чтобы получить / установить значение этого свойства в экземпляре Genre.
источник
Это автоматически реализованное свойство. По сути, это сокращенный способ создания свойств для класса в C # без необходимости определения для них частных переменных. Они обычно используются, когда не требуется никакой дополнительной логики при получении или установке значения переменной.
Вы можете прочитать больше в Руководстве по программированию автоматически реализуемых свойств MSDN .
источник
Шаблон get / set предоставляет структуру, которая позволяет добавлять логику во время установки ('set') или извлечения ('get') экземпляра свойства экземпляра класса, что может быть полезно, когда для реализации логики требуется некоторая логика создания экземпляра. имущество.
Свойство может иметь только метод доступа get, что делается для того, чтобы сделать это свойство доступным только для чтения.
При реализации шаблона get / set промежуточная переменная используется в качестве контейнера, в который может быть помещено значение и извлечено значение. Промежуточная переменная обычно начинается с подчеркивания. эта промежуточная переменная является закрытой, чтобы обеспечить доступ к ней только через вызовы get / set. Посмотрите ответ Брэндона, поскольку его ответ демонстрирует наиболее часто используемые синтаксические соглашения для реализации get / set.
источник
Это означает, что если вы создадите переменную типа Genre, вы сможете получить доступ к переменной как свойству
источник
Такой
{ get; set; }
синтаксис называется автоматическими свойствами, синтаксис C # 3.0Вы должны использовать Visual C # 2008 / csc v3.5 или выше для компиляции. Но вы можете скомпилировать выходные данные с целевым уровнем, равным .NET Framework 2.0 (для поддержки этой функции не требуется среда выполнения или классы).
источник
В Visual Studio, если вы определяете свойство
X
в классе и хотите использовать этот класс только в качестве типа, после создания проекта вы получите предупреждение «Поле X никогда не назначается и всегда будет иметь значение по умолчанию». значение " .Добавив
{ get; set; }
кX
свойству, вы не получите это предупреждение.Кроме того, в Visual Studio 2013 и более поздних версиях, добавив,
{ get; set; }
вы сможете увидеть все ссылки на это свойство.источник
Это в основном сокращение. Вы можете написать
public string Name { get; set; }
как во многих примерах, но вы также можете написать это:Почему это используется? Его можно использовать для фильтрации доступа к свойству, например, вы не хотите, чтобы имена включали числа.
Позвольте мне привести Вам пример:
Официально он называется «Автоматически реализованные свойства» и имеет хорошую привычку читать ( руководство по программированию ). Я также рекомендовал бы обучающее видео C # Properties: зачем использовать «get» и «set» .
источник
Get set - это модификаторы доступа к свойству. Get читает поле свойства. Set устанавливает значение свойства. Получить как доступ только для чтения. Установить как доступ только для записи. Чтобы использовать свойство как чтение и запись, необходимо использовать как get, так и set.
источник
Get вызывается, когда свойство появляется справа (RHS). Set вызывается, когда свойство отображается слева (LHS) символа '='.
Для автоматически реализуемого свойства поле поддержки работает за сценой и не отображается.
Пример:
Принимая во внимание, что для нереализованного свойства вспомогательное поле является открытым, видимым как частная переменная области действия.
Пример:
Кроме того, стоит отметить, что здесь «getter» и «setter» могут использовать разные «вспомогательные поля»
источник
Определите частные переменные
Внутри конструктора и загрузки данных
Я создал Constant и загружаю данные из константы в класс Selected List.
источник
Свойство похоже на слой, который отделяет приватную переменную от других членов класса. Из внешнего мира кажется, что свойство - это просто поле, свойство можно получить с помощью .Property
FullName является собственностью. Тот, что со стрелкой, является ярлыком. Из внешнего мира мы можем получить доступ к FullName следующим образом:
Абоненты не заботятся о том, как вы внедрили FullName. Но внутри класса вы можете изменить FullName как хотите.
Проверьте документацию Microsoft для более подробного объяснения:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
источник