Относительно полей: свойство можно вынести в интерфейс, а поле - нет; свойство может инкапсулировать какой-то алгоритм (если когда-нибудь ты вместо get;set задумаешь что-то более сложное написать) , а поле - нет.
Относительно методов: object.prop = val выглядит красивее, чем object.setProp(val). А вообще, не более чем синтаксический сахар, да.
Другие языки программирования и технологии
Для чего нужны Properties (C#) ? Какая от них польза, в каких случаях они полезны
>Для чего нужны Properties (C#) ?
Для контроля свойств объекта.
>Какая от них польза, в каких случаях они полезны
Когда свойства объекта нуждаются в контроле.
Для контроля свойств объекта.
>Какая от них польза, в каких случаях они полезны
Когда свойства объекта нуждаются в контроле.
В отличие от полей свойства ещё могут выполнять дополнительную обработку перед изменением состояния. Это достигается за счёт обладания двумя блоками, называемыми средствами доступа (accessors), первое определяется с помощью ключевого слова get и отвечает за получение значения свойства, второе определяется с помощью ключевого слова set и отвечает за установку значения свойства. Допускается в коде опускать при необходимости на выбор одно из двух этих средств. Если опустить средство get, то будет возможен доступ только для записи, если опустить средство set, то будет возможен доступ только для чтения.
Регулировать доступ можно и с помощью модификаторов, например блок get сделать общедоступным (public), а блок set защищённым (protected). Для получения действительного свойства необходимо включать, хотя бы один из двух этих блоков, иначе оно, свойство, будет бесполезным.
Базовая структура свойства состоит из стандартного ключевого слова, указывающего на уровень доступа (такого как private, public и т. д.) , за которым идёт имя типа, имя свойства, заданное с использованием схемы PascalCasing, и блок, содержащий один либо оба блока get и set, содержащие код обработки свойства:
public int MyIntProp
{
get
{
//Код для получения значения свойства
}
set
{
//Код для установки значения свойства
}
}
Первая строка похожа на определение поля, за тем исключением, что при определении поля строка заканчивается символом точки с запятой, а при определении свойства идёт блок, включающий вложения в виде одного или двух известных нам блоков. Для получения значения свойства из блока get, в обязательном порядке, требуется возвращаемое значение типа свойства. Простые свойства часто ассоциируются с одним приватным полем, управляя доступом к нему, в случае чего блок get может возвращать значение поля напрямую:
private int myInt;//Поле, используемое свойством
public int MyIntProp//Свойство
{
get
{
return myInt;
}
set
{
myInt = value;
}
}
Код, за пределами класса, лишён доступа к полю myInt напрямую. Зато внешний код может получить этот доступ к этому полю через свойство.
Функция set присваивает значение полю подобным образом. Здесь можно использовать ключевое слово value для ссылки на значение, получаемое от пользователя свойства. value равно значению того же типа, что и у свойства, так что если в свойстве используется тот же тип, что в поле, беспокоиться о приведении типов не нужно.
Следующее свойство делает немного больше, чем просто защищает от прямого доступа к полю myInt. Реальная мощь свойств проявляется тогда, когда осуществляется больший контроль над процессами. Например, блок set мог бы быть реализован следующим образом:
set
{
if (value >= 0 && value <= 10)
myInt = value;
}
Данная реализация предусматривает изменение значения myInt в случае присваивания свойству значения в заданном диапазоне. Но с этим всё понятно, непонятно что же будет происходить в случае недействительного значения. Существует четыре возможных варианта:
ничего;
полю должно присвоиться значение по умолчанию;
выполнение кода должно продолжаться так, будто ничего страшного не произошло, но событие регистрируется в журнале для последующего анализа;
должно генерироваться исключение.
В общем случае предпочтительными являются два последних варианта. Выбор того или иного зависит от того, каким образом будет использоваться класс, и насколько много контроля будет предоставляться его пользователям. Генерация исключения предоставит пользователям больше контроля, и позволит знать, что же происходит, это позволит им реагировать соответствующим образом. В пространстве имён System есть одно из стандартных исключений:
set
{
if (value >= 0 && value <= 10)
myInt = value;
else
throw (new ArgumentOutOfRangeException("MyIntProp", value,
"MyIntProp может присваиваться значение от 0 до 10"));
}
Обработать его можно в коде, использующем свойство, с помощью логики try… catch… finally.
Регулировать доступ можно и с помощью модификаторов, например блок get сделать общедоступным (public), а блок set защищённым (protected). Для получения действительного свойства необходимо включать, хотя бы один из двух этих блоков, иначе оно, свойство, будет бесполезным.
Базовая структура свойства состоит из стандартного ключевого слова, указывающего на уровень доступа (такого как private, public и т. д.) , за которым идёт имя типа, имя свойства, заданное с использованием схемы PascalCasing, и блок, содержащий один либо оба блока get и set, содержащие код обработки свойства:
public int MyIntProp
{
get
{
//Код для получения значения свойства
}
set
{
//Код для установки значения свойства
}
}
Первая строка похожа на определение поля, за тем исключением, что при определении поля строка заканчивается символом точки с запятой, а при определении свойства идёт блок, включающий вложения в виде одного или двух известных нам блоков. Для получения значения свойства из блока get, в обязательном порядке, требуется возвращаемое значение типа свойства. Простые свойства часто ассоциируются с одним приватным полем, управляя доступом к нему, в случае чего блок get может возвращать значение поля напрямую:
private int myInt;//Поле, используемое свойством
public int MyIntProp//Свойство
{
get
{
return myInt;
}
set
{
myInt = value;
}
}
Код, за пределами класса, лишён доступа к полю myInt напрямую. Зато внешний код может получить этот доступ к этому полю через свойство.
Функция set присваивает значение полю подобным образом. Здесь можно использовать ключевое слово value для ссылки на значение, получаемое от пользователя свойства. value равно значению того же типа, что и у свойства, так что если в свойстве используется тот же тип, что в поле, беспокоиться о приведении типов не нужно.
Следующее свойство делает немного больше, чем просто защищает от прямого доступа к полю myInt. Реальная мощь свойств проявляется тогда, когда осуществляется больший контроль над процессами. Например, блок set мог бы быть реализован следующим образом:
set
{
if (value >= 0 && value <= 10)
myInt = value;
}
Данная реализация предусматривает изменение значения myInt в случае присваивания свойству значения в заданном диапазоне. Но с этим всё понятно, непонятно что же будет происходить в случае недействительного значения. Существует четыре возможных варианта:
ничего;
полю должно присвоиться значение по умолчанию;
выполнение кода должно продолжаться так, будто ничего страшного не произошло, но событие регистрируется в журнале для последующего анализа;
должно генерироваться исключение.
В общем случае предпочтительными являются два последних варианта. Выбор того или иного зависит от того, каким образом будет использоваться класс, и насколько много контроля будет предоставляться его пользователям. Генерация исключения предоставит пользователям больше контроля, и позволит знать, что же происходит, это позволит им реагировать соответствующим образом. В пространстве имён System есть одно из стандартных исключений:
set
{
if (value >= 0 && value <= 10)
myInt = value;
else
throw (new ArgumentOutOfRangeException("MyIntProp", value,
"MyIntProp может присваиваться значение от 0 до 10"));
}
Обработать его можно в коде, использующем свойство, с помощью логики try… catch… finally.
Properties - с англ. свойства, отсюда все вытекающие, если это приложение WFA, тогда это от банальных размеров, цветов, шрифтов и тд форм, до дескрипторов окон.
Валерий Соколов
Я имел ввиду property как class member с методами get\set
Специальная структура данных для грамотной структурированной реализации некоторых технологий в .NET, таких как WPF/Silverlight и ASP .NET. В простых приложениях смысла не имеет, ну разве что в блоки get и set можно вставлять объемные куски кода.
Похожие вопросы
- Посоветуйте хорошую книгу без всяких мусорных слов, а только нужных по C++.
- Зачем нужен C++, если есть C?
- Я программист java,c++,c#,cи, нужен ли я кому нибудь?
- Вопрос актуальности языка C++, расхождение источников. Мне нужна достоверная инфа на это счет.
- C++. В данном случае delete нужен?
- Программка c# нужна помощь
- Для чего нужен return в C++ ?например return 0;
- Зачем нужен C++? И как долго ему учится?
- c++ зачем она нужна?)
- помогите пожалуйста кто смыслит в C# или в C++, очень нужна ваша помощь, нужен код программы, точнее двух