Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 102

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 96 97 98 99 100 101 < 102 > 103 104 105 106 107 108 .. 404 >> Следующая


eet

(

if [value >= О Ы value <= 10) myint - value;

>

В данном случае мы изменяем myint, только если значение свойства находится между 0 и 10. В подобных ситуациях необходимо решить: что предпринять, если использовано недопустимое значение? Здесь имеются четыре возможности:

? Ничего не предпринимать (как в коде, приведенном выше).

? Присвоить полю значение по умолчанию.

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

? Сгенерировать исключительную ситуацию.

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

set

( ¦

if (value >= 0 ЬЬ value <= 10) myint = value:
Определение членов классов

209

else

throw (new ArgumentOutOfRangeException ('MyintProp', value, 'Значение свойства НуIntProp должно лежать в диапазоне иежду 0 и 10.')) i

)

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

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

Свойства, так же как и методы, могут использовать ключевые слова virtual, override и abstract, т. е. те ключевые слова, использование которых для полей оказывается недопустимым.

Практикум: использование полей, методов и свойств

1. Создайте новый проект консольного приложения с именем chiOExOl В директории C:\BegCSharp\ChapterlO.

2. С помощью VS добавьте новый класс с именем Myciaae В файл MyCiass. св.

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

public class HyClass .

public readonly string Name

private int intVal; .

public int Val . .

( ' ‘ ¦¦¦¦¦'¦: ' get , .

( ' -:¦¦¦¦ .

- return intval;

) ‘ ' '¦ ; set

( ¦ ........

if [value >« 0 kt value <* 10 > intVal » value; else

throw (new ArgumentOutOf RnngeException('Val', value,

¦Val must be assigned a value between 0 and 10.*)); // Значение, присваиваемое Val, должно леаать л диапазоне между 0 и 10, // )

}

public p.vtrrlda string ToStringO {

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

}

private HyClass() : this('Default Name')

{

)

.public MyClaee (string newNome)

( .

Name - newName ; intval = 0;

)

)
private MyClass {) : this('Default Name")

(

>

Обратите внимание, что используется this ('Default Name') —для гарантированного присвоения Name какого-либо значення при обращении к конструктору. Последнее возможно, если данный класс используется для создания нового класса. Отсутствие значения у поля Name в дальнейшем может привести к возникновению ошибок.

Используемый не по умолчанию конструктор присваивает значения описанному как readonly полю паше (это присваивание можно осуществить либо при объявлении поля, либо с помощью конструктора) и частному полю intvai.

Далее Main!) пытается выполнить два присваивания свойству val объекта myObj (он является экземпляром класса Myciasa). Для присваивания значений - I и 0 используются два прохода цикла for, а для обнаружения возможных исключительных ситуаций применяется конструкция try,. .catch. Когда свойству присватается -1, возникает исключительная ситуация System.ArgumentOutOfRangeException И КОД, находящийся в блоке catch, выводит информацию о ней в окно консоли. При
Определение членов классов

211

следующем проходе цикла свойству val присваивается значение 0, а затем через это свойство значение присваивается частному полю intvai.

В заключение для вывода отформатированной строки, представляющей содержимое объекта, используется переопределенный метод ToStringо:

public override string ToString()

{

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

}

Этот метод должен быть объявлен с использованием ключевого слова override, поскольку названный метод переопределяет виртуальный метод ToString () базового класса System.object. Код в данном случае использует непосредственно свойство val, а не частное поле intvai. Нет никаких причин, по которым мы не могли бы использовать свойства внутри класса подобным образом, хотя в этом случае может возникать небольшое замедление работы программы (настолько небольшое, что мы вряд ли сумеем его обнаружить). Использование свойства, кроме того, позволяет осуществлять контроль за допустимостью значении, присущий использованию свойств, что также может оказаться полезным для кода, находящегося внутри класса.

Мастера VS для работы с членами
Предыдущая << 1 .. 96 97 98 99 100 101 < 102 > 103 104 105 106 107 108 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.