Урок № 18. Свойства (Properties). Часть 1
Свойства (Properties). Часть 1
Доброго времени суток! В прошлом уроке мы говорили о таких понятиях ООП, как класс, объект, методы и поля классов. Мы рассмотрели использование методов в качестве открытой части классов, т.е. как некий интерфейс доступа к объектам. Таким образом, поля класса делались закрытыми для «внешнего мира», и все действия над объектом и его состоянием осуществлялись с помощью методов! Но с таким подходом, нам нужно создавать по два метода для каждого поля, плюс синтаксис использования методов немного громоздкий. К счастью, в C# есть механизм свойств (properties). Свойства (properties), в данном случае, занимают промежуточное положение между полями и методами. Синтаксически, использование свойств выглядит как использование полей, но по функциональности свойства схожи с методами.
Каждое свойство может иметь два так называемых метода доступа, и как раз таких как нам нужно, один для установки значения поля (метод set), а другой для получения (метод get). А теперь, давайте посмотрим, как это работает на практике. Но для начала вспомним пример из предыдущего урока, когда мы создавали по два отдельных метода на каждое поле:
//Класс, описывающий простого студента class Student { //Возвращает значение поля name public string GetName() { return name; } //Возвращает значение поля grade public uint GetGrade() { return grade; } //Устанавливает значение поля name public void SetName(string aName) { name = aName; } //Устанавливает значение поля grade public void SetGrade(uint aGrade) { grade = aGrade; } //Поля класса private string name; //Имя студента private uint grade; //Курс }
А теперь посмотрим, как будет выглядеть класс «Student», если мы заменим методы на свойства:
//Класс, описывающий простого студента class Student { //Свойство, для доступа к полую "name" public string Name { //Возвращает значение get { return name; } //Устанавливает значение set { name = value; } } //Свойство, для доступа к полую "grade" public uint Grade { //Возвращает значение get { return grade; } //Устанавливает значение set { grade = value; } } //Поля класса private string name; //Имя студента private uint grade; //Курс }
Теперь, вместо пары отдельных методов (для установки и получения значения), мы используем одно свойство, в котором заключена их функциональность.
Давайте подробно разберем как создаются свойства! А делается это по следующим правилам: сначала указывается модификатор доступа, после него, через пробел, указывается тип возвращаемого/устанавливаемого значения, за ним (тоже через пробел) – название свойства, а после названия – в фигурных скобках следует тело свойства.
[модификатор доступа] [тип значения] [Название] { //Тело свойства }
А тело свойства может состоять из двух методов доступа, get для возврата значения и set для установки.
Свойство может иметь как оба метода (и get и set), так и только один (любой из них).
Метод get очень прост, но он должен возвращать значение по типу, совпадающее с типом свойства. В самом простом случае (а точнее в большинстве случаев), метод get выглядит примерно так:
get { retrun name; } //Где name – имя поля класса
А вот метод set имеет свою особенность, в нем доступно особое значение (по типу, совпадающее с типом свойства) это то значение, которое указал программист (пользователь класса) при использовании свойства в своем коде. Это значение, внутри метода set, можно получить, используя ключевое слово value.
А теперь, давайте посмотрим, как использовать свойства на реальных объектах класса «Student»:
//Задаем значения полей объекта ivanStudent.Name = "Иван"; //Задаем имя, работает метод set свойства Name ivanStudent.Grade = 2; //Задаем курс, работает метод set свойства Grade //Вывод значений Console.WriteLine("Имя: " + ivanStudent.Name); //Получаем имя, работает метод get свойства Name Console.WriteLine("Курс: " + ivanStudent.Grade); //Получаем курс, работает метод get свойства Grade
Код представлен с комментариями, который поясняют что и когда работает. А в следующем уроке мы продолжим разговор о свойствах.