logo search
Лекции по ая

Свойства

Свойства представляют специальную синтаксическую конструкцию, предназначенную для обеспечения эффективной работы с полями. Правильной стратегией является закрытие полей - поля объявляются с модификатором protected или private. Клиенты класса не должны использовать информацию о том, как устроены поля, недолжны обращать к полям напрямую. Это облегчает возможную модификацию класса в будущем. Класс сможет изменить данные, сохранив интерфейс, реализованный по средством свойств. Также свойства могут реализовывать некоторый алгоритм обработки данных. Таким образом, свойства, предоставляют средства позволяющие читать, менять и проверять значения присеваемые полям класса. Свойство это более гибкая альтернатива поля. Свойства определяться следующим образом:

[<атрибуты>] [<модификаторы>] <тип> <идентификатор>

{

get {[<тело метода get>] return <возвращаемое значение>}

set {[<тело метода set >] >}

}

Метод доступа свойства get используется для возврата значения свойства, а метод доступа set используется для назначения нового значения. Эти методы доступа могут иметь различные уровни доступа.

Определение свойства C# подобно определению поля, за исключением того, что после имени свойства идет блок кода, заключенный в фигурные скобки. В блоке кода может быть два метода, называемые get и set. Метод get используется для получения (чтения) значения свойства, метод set для назначения (записи) значения свойства. Имя свойство может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его методы get и set. В методе set, определен параметр value, который является входным параметром, и содержит данные передаваемые из вне. Средство доступа get всегда возвращает тот же тип данных, который имеет свойство, к которому оно относится

Свойства не определяют место в памяти для хранения полей, а лишь управляют доступом к полям. Это означает, что само свойство не предоставляет поле, и поэтому поле должно быть определено независимо от свойства.

Рассмотрим пример работы со свойствами:

class Student

{

string name;

string group;

int year;

public void Print()

{

Console.WriteLine("Студент {0} группы {1} родился в {2}", name , group, year);

}

public Student(string NewName, string NewGroup, int NewYear)

{

name = NewName;

group = NewGroup;

year = NewYear;

}

public string Name

{

get

{

return name;

}

set

{

name = value;

}

}

public string SetGroup

{

set

{

group = value;

}

}

public string GetGroup

{

get

{

return group;

}

}

public int Year

{

get

{

return year;

}

}

}

class Program

{

static void Main()

{

Student S1 = new Student("Ivanov", "BAS-11", 1990);

S1.Print();

S1.Name = "Petrov";

Console.WriteLine("Студент {0} группы {1} родился в {2}", S1.Name, S1.GetGroup, S1.Year);

S1.SetGroup = "BAS-21";

S1.Print();

Console.ReadLine();

}

}

В приведенном примере определено 4 свойства. Name для записи и чтения поля name. SetGroup для записи поля group. GetGroup для чтения поля group. Year для чтения поля year. Поля group и name могут меняться в процессе жизненного цикла, дата рождения студента нет, поэтому для поля year не определено свойство с методом set. При вызове метода Main, создаться объект S1 класса Student. Для этого вызывается одноименный конструктор, которому передаться инициализирующие значения. После создания объекта, вызывается метод Print, и на экран выводиться строка определенная кодом метода. При помощи свойства Name меняется, значение поля name. При помощи свойств Name, GetGroup, Year с методом get считываем и выводим на экран значения полей объекта. При помощи свойства SetGroup меняем значение поля group. Вызывается метод Print, и на экран выводиться строка определенная кодом метода.