Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

FailSoftArray2D fs = new FailSoftArray2D(3, 5); int x;

// Выявить скрытые сбои.

Console.WriteLine("Скрытый сбой."); for (int i=0; i < 6; i++) fs[i, i]=i*10;

for(int i=0; i < 6; i++) {

x = f s [ i, i ] ;

if(x != -1) Console.Write (x + " ");

}

Console.WriteLine ;

// А теперь показать сбои.

Console.WriteLine("\пСбой с уведомлением

об ошибках."); for(int i=0; i < 6; i++) {

fs[i,i] = i *10; if(fs.ErrFlag)

Console.WriteLine("fs[" + i + ", " + i + "] вне границ

}

for(int i=0; i < 6; i++) {

x = f s [ i, i ] ;

if(!fs.ErrFlag) Console.Write(x + " ");

else

Console.WriteLine("fs[" + i + ", " + i + "] вне границ");

}

}

}

Вот к какому результату приводит выполнение этого кода:

Скрытый сбой.

0 10 20 0 0 0

Сбой с уведомлением об ошибках.

fs[3, 3] вне границ

fs[4, 4] вне границ

fs[5, 5] вне границ

0 10 20 fs[3, 3] вне границ

fs[4, 4] вне границ

fs[5, 5] вне границ

Свойства

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

Свойства очень похожи на индексаторы. В частности, свойство состоит из имени и аксессоров get и set. Аксессоры служат для получения и установки значения переменной. Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры get и set. Аналогичным образом используются аксессоры get и set индексатора.

Ниже приведена общая форма свойства:

ТИП имя{ *

get {

// код аксессора для чтения из поля

}

set {

//

код аксессора для записи в поле

}

где тип обозначает конкретный тип свойства, например int, а имя — присваиваемое свойству имя. Как только свойство будет определено, любое обращение к свойству по имени приведет к автоматическому вызову соответствующего аксессора. Кроме того, аксессор set принимает неявный параметр value, который содержит значение, присваиваемое свойству.

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

Ниже приведен простой пример программы, в которой определяется свойство My Prop, предназначенное для доступа к полю prop. В данном примере свойство допускает присваивание только положительных значений.

// Простой пример применения свойства.

using System;

class SimpProp {

int prop; // поле, управляемое свойством MyProp

public SimpProp { prop =0; }

/* Это свойство обеспечивает доступ к закрытой переменной экземпляра prop. Оно допускает присваивание только положительных значений. */ public int MyProp { get {

return prop;

}

set {

if(value >= 0) prop = value;

}

}

}

// Продемонстрировать применение свойства, class PropertyDemo { static void Main {

SimpProp ob = new SimpProp;

Console.WriteLine("Первоначальное значение ob.MyProp: " + ob.MyProp);

ob.MyProp = 100; // присвоить значение Console.WriteLine("Текущее значение ob.MyProp: " + ob.MyProp);

// Переменной prop нельзя присвоить отрицательное значение.

Console.WriteLine("Попытка присвоить значение " +

"-10 свойству ob.MyProp");

ob.MyProp = -10;

Console.WriteLine("Текущее значение ob.MyProp: " + ob.MyProp);

}

}

Вот к какому результату приводит выполнение этого кода.

Первоначальное значение ob.MyProp: 0 Текущее значение ob.MyProp: 100

Поделиться:
Популярные книги

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

(Не)нужная жена дракона

Углицкая Алина
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
(Не)нужная жена дракона

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Я не Монте-Кристо

Тоцка Тала
Любовные романы:
современные любовные романы
5.57
рейтинг книги
Я не Монте-Кристо

Полковник Империи

Ланцов Михаил Алексеевич
3. Безумный Макс
Фантастика:
альтернативная история
6.58
рейтинг книги
Полковник Империи

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Доктор 2

Афанасьев Семён
2. Доктор
Фантастика:
альтернативная история
5.00
рейтинг книги
Доктор 2

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Купи мне маму!

Ильина Настя
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Купи мне маму!

Экономка тайного советника

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Экономка тайного советника

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка