Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ая.docx
Скачиваний:
22
Добавлен:
20.09.2019
Размер:
276.66 Кб
Скачать

Деструкторы

Деструкторы используются для уничтожения экземпляров классов. В платформе .NET Framework сборщик мусора автоматически управляет распределением и освобождением памяти для управляемых объектов приложения. Однако для очистки неуправляемых ресурсов, создаваемых приложением, могут потребоваться деструкторы. На один класс допускается только один деструктор.

Свойства

Свойства представляют специальную синтаксическую конструкцию, предназначенную для обеспечения эффективной работы с полями. Правильной стратегией является закрытие полей - поля объявляются с модификатором 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, и на экран выводиться строка определенная кодом метода.