Программирование >>  Программирование с использованием ajax 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 396


get {

return mylnt;

set {

Код установки значения свойства.

Код, находящийся за пределами класса, не сможет получать доступ к данному полю mylnt напрямую из-за того, что уровень доступности последнего указан как private. Вместо этого внешнему коду для получения доступа к этому полю придется использовать свойство. Функция set присваивает значение полю похожим образом. Здесь можно применять ключевое слово value для ссылки на значение, получаемое от пользователя свойства:

Поле, используемое свойством, private int mylnt;

Свойство.

public int MylntProp

get {

return mylnt;

set {

mylnt = value;

value равно значению того же типа, что и у свойства, так что если в свойстве используется тот же тип, что в поле, беспокоиться о приведении типов не нужно.

Это простое свойство делает немного больше, чем просто защищает от прямого доступа к полю mylnt. Реальная мощь свойств проявляется тогда, когда осуществляется немного больше контроля над процессами. Например, блок set мог бы быть реализован и следующим образом:

set {

if (value > = О && value <= 10) mylnt = value;

Эта реализация предусматривает изменение mylnt только в случае присваивания свойству значения в диапазоне между О и 10. В ситуациях, подобных этой, требуется делать важный выбор касательно того, что должно происходить в случае использования недействительного значения. Существует четыре возможных варианта:

□ ничего (как и в предыдущем коде);

□ полю должно присваиваться значение по умолчанию;

а выполнение кода должно продолжаться так, будто ничего страшного не произошло, но с регистрацией события в журнале для последующего анализа причин его возникновения;

□ должно генерироваться исключение.



В общем случае предпочтительными являются два последних варианта. Выбор того или иного зависит от того, каким образом будет использоваться класс и насколько много контроля должно предоставляться его пользователям. Генерация исключения предоставит пользователям довольно много контроля и позволит знать о том, что происходит, благодаря чему те смогут реагировать соответствующим образом. Применять в качестве такого исключения можно одно из стандартных исключений, которые доступны в пространстве имен System:

set {

if (value > = О && value <= 10)

mylnt = value; else

throw (new ArgшIlentOutOfRangeException( MylntProp , value,

MylntProp must be assigned a value between 0 and 10. )) ;

MylntProp может присваиваться только значение в диапазоне от О до 10

Обработать его можно в коде, использующем свойство, с помощью логики try. . . catch. . . finally, о которой более подробно рассказывалось в главе 7.

Регистрация данных, к примеру, в текстовом файле, может оказаться удобным вариантом, скажем, в производственном коде, где проблемы на самом деле не должны возникать. Такой вариант позволит разработчикам проверять показатели производительности и при необходимости даже отлаживать существующий код.

В свойствах, как и в методах, могут использоваться ключевые слова virtual, override и abstract, что в случае полей совершенно невозможно. И, наконец, последней особенностью свойств является то, что блоки get и set в них могут иметь свои собственные уровни доступности, как показано ниже:

Поле, используемое свойством, private int mylnt;

Свойство.

public int MylntProp

get {

return mylnt;

protected set

mylnt = value;

Здесь использовать блок set сможет только код, находящийся либо внутри самого класса, либо внутри его производных классов.

То, какие уровни доступности могут применяться для блоков get и set, зависит от уровня доступности самого свойства: делать их доступнее того свойства, к которому они относятся, запрещено. Это означает, что в свойствах с уровнем доступности private не может использоваться вообще никаких модификаторов доступности для их блоков get и set, в то время как в свойствах с уровнем доступности public, наоборот, для блоков get и set могут задаваться все возможные модификаторы. В следующем практическом занятии предоставляется возможность поэкспериментировать с определением и использованием полей, методов и свойств.



Практическоеiwwni Использование полей, методов и свойств

1. Создайте новое консольное приложение по имени ChlOExOl и сохраните его в каталоге С:\BegVCSharp\ChapterlO.

2. Добавьте в него новый класс по имени MyClass с помощью ссылки Add Class (Добавить класс), что приведет к определению этого нового класса в отдельном новом файле MyClass . cs.

3. Измените код в этом файле MyClass. cs следующим образом:

public class MyClass {

public readonly string Name; private int intVal;

public int Val {

get {

return intVal;

set

if (value > = 0 && value <= 10) intVal = value; else

throw (new ArgumentOutOfRangeException( Val , value, Val must be assigned a value between 0 and 10. ) ) ; Val может присваиваться только значение в диапазоне от О до 10

public override string ToString () {

return Name: + Name + \nVal: + Val;

private MyClass0 : this( Default Name )

public MyClass(string newName) {

Name = newName; intVal = 0;

4. Далее измените код в файле Program, cs следующим образом:

static void Main(string[] args) {

Console.WriteLine( Creating object myObj... );

Создание объекта myObj... MyClass myObj = new MyClass( My Object ); Console.WriteLine( myObj created. );

Объект myObj создан for (int i = -1; i <= 0; 1++) {



1 ... 77 78 79 [ 80 ] 81 82 83 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика