Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Свойства экземпляра класса






Свойства объединяют функции полей и методов. Для объекта, использующего какой-либо объект, свойство является полем, поэтому для доступа к свойству требуется тот же синтаксис, что и для поля. Для средства реализации класса свойство является одним или двумя блоками кода, представляющими метод доступа get и/или метод доступа set. Блок кода для метода доступа get выполняется, когда осуществляется чтение свойства; блок кода для метода доступа set выполняется, когда свойству присваивается новое значение. Свойство без метода доступа set считается доступным только для чтения.Свойство без метода доступа get считается доступным только для записи. Свойство с обоими методами доступа доступно для чтения и для записи.

В отличие от полей свойства не классифицируются как переменные. Поэтому свойство нельзя передать в качестве параметра ref или out.

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

Свойства объявляются в блоке класса с помощью последовательного указания уровня доступа для поля, типа свойства, имени свойства и блока кода, в котором объявляется метод доступа get и/или set. Например:

public class Date

{

private int month = 7; // Backing store

 

public int Month

{

get

{

return month;

}

set

{

if ((value > 0) & & (value < 13))

{

month = value;

}

}

}

}

В данном примере Month объявляется как свойство, поэтому метод доступа set может обеспечить задание для свойства Month значения от 1 до 12. Свойство Month использует частное поле для отслеживания фактического значения. Фактическое местоположение данных свойства часто называется " резервным хранилищем" этого свойства. Обычно в качестве резервного хранилища свойств используются частные поля. Поле помечается как частное для того, чтобы сделать возможным изменение значения поля только посредством вызова свойства.

Автоматически реализуемые свойства позволяют использовать упрощенный синтаксис для простых объявлений свойств.

 

Метод доступа get

 

Основная часть метода доступа get похожа на основную часть метода. Она должна возвращать значение типа свойства. Выполнение метода доступа get эквивалентно считыванию значения поля.Например, когда возвращается частная переменная из метода доступа get и разрешена оптимизация, вызов метода доступа get встраивается компилятором, что позволяет избежать ненужных затрат на вызов метода. Однако виртуальный метод доступа get не может быть встроен, поскольку во время компиляции у компилятора нет данных о том, какой метод может быть вызван во время выполнения.Ниже приведен метод доступа get, который возвращает значение частного поля name:

class Person

{

private string name;

public string Name

{

get

{

return name;

}

}

}

 

При создании ссылки на свойство, кроме случая присвоения ему значения, для чтения значения свойства вызывается метод доступа get. Например:

Person person = new Person();

 

System.Console.Write(person.Name);

 

Метод доступа get должен заканчиваться оператором return или throw, а элемент управления не должен выходить за основную часть метода доступа.

Изменение состояния объекта с помощью метода доступа get является плохим стилем и его следует избегать. Например, следующий метод доступа имеет побочный эффект, заключающийся в изменении состояния объекта при каждом обращении к полю number.

private int number;

public int Number

{

get

{

return number++;

}

}

 

Метод доступа get можно использовать для возвращения значения поля или для вычисления и возвращения этого значения. Например:

class Employee

{

private string name;

public string Name

{

get

{

return name! = null? name: " NA";

}

}

}

 

Если в предыдущем фрагменте кода свойству Name не назначается какое-либо значение, это свойство возвращает значение " NA".

Метод доступа set

Метод доступа set похож на метод, имеющий тип возвращаемого значения void. В нем используется неявный параметр value, тип которого соответствует типу свойства. В следующем примере метод доступа set добавляется в свойство Name:

class Person

{

private string name;

public string Name

{

get

{

return name;

}

set

{

name = value;

}

}

}

Когда свойству присваивается значение, выполняется вызов метода доступа set с помощью аргумента, предоставляющего новое значение. Например:

Person person = new Person();

person.Name = " Joe";

 

System.Console.Write(person.Name);

 

Использование имени неявного параметра value для объявления локальной переменной в методе доступа set является ошибкой.

Свойства могут быть объявлены как public, private, protected, internal или protected internal. Эти модификаторы доступа определяют порядок доступа к свойству для пользователей класса. Методы доступа get и set могут иметь различные модификаторы доступа для одного свойства. Например, метод доступа get может иметь модификатор public для разрешения доступа только для чтения из типа, а метод доступа set может иметь модификатор private или protected.

Свойство можно объявить как статическое свойство при помощи ключевого слова static. При этом свойство становится доступным для вызова в любое время, даже если экземпляр класса отсутствует..

Свойство можно пометить как виртуальное свойство при помощи ключевого слова virtual. Это позволяет производным классам переопределять поведение свойства при помощи ключевого словаoverride. Свойство, переопределяющее виртуальное свойство, может также быть sealed, что указывает на то, что для производных классов оно более не является виртуальным. И наконец, свойство можно объявить как abstract. Это означает, что в классе отсутствует реализация, поэтому производные классы должны создавать свою собственную реализацию..

Примечание
Использование модификатора virtual, abstract или override для метода доступа свойства static является ошибкой.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.