Во-первых, «атрибуты» здесь не являются правильной терминологией. Когда вы объявляете члена класса, для которого определены get
и / или set
(формально известные как «методы доступа»), вы определяете свойство. Свойства - это удобный способ предоставления значений приватных полей, поскольку вы можете добавить логику в механизмы получения и установки.
Во-вторых, когда вы объявляете участника name
, как вы сделали через
public string name { get; set; }
компилятор расширит это до следующего:
private string _name;
public string name {
get {
return _name;
}
set {
_name = value;
}
}
То есть компилятор автоматически создаст для вас вспомогательное поле и определит методы доступа. Это так называемые "автоматические свойства" (для людей) 1 .
В-третьих, вы никогда не должны 2 публично выставлять поля. Итак, если вы хотите выставить строку name
как часть вашего открытого интерфейса, лучше сделать это как свойство. Во-первых, это обеспечивает лучшую инкапсуляцию. Во-вторых, он может быть объявлен виртуальным и переопределен в классах с производными данными. В-третьих, вы можете иметь собственную логику. В-четвертых, у вас могут быть разные уровни доступа к механизмам чтения и записи свойств, но вы не можете использовать поле.
В-четвертых, в соответствии с принятыми соглашениями об именах, публичные свойства должны быть названы с помощью CamelCase , чтобы вы предпочитали Name
вместо name
.
1 : Извините, плохая шутка, которую я так долго ждала.
2 : Почти никогда.