На этом шаге мы рассмотрим еще один пример использования исключений.
Следующая программа содержит класс MyClass, у которого есть целочисленное (тип int) свойство number. Но значение этого свойства сохраняется в закрытом поле типа byte. С помощью инструкции checked и обработки исключений свойство реализовано таким образом, что при попытке присвоить свойству значение, выходящее за допустимые границы для типа byte, свойству присваивается значение 255. Интересующий нас код представлен ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr232_1 { // Класс со свойством: class MyClass { // Закрытое поле типа byte: private byte num; // Открытое свойство типа int: public int number{ // Аксессор для считывания значения свойства: get { // Значение свойства: return num; } // Аксессор для присваивания значения свойству: set { // Контролируемый код: try { // Генерирование исключения при переполнении: checked { // Значение поля: num = (byte)value; } } // Обработка исключений: catch(OverflowException) { // Значение поля: num = 255; } } } } // Главный класс: class Program { // Главный метод: static void Main() { // Объект класса: MyClass obj = new MyClass(); // Присваивание значения свойству: obj.number = 100; // Проверка значения свойства: Console.WriteLine("Значение свойства: " + obj.number); // Присваивание значения свойству: obj.number = 300; // Проверка значения свойства: Console.WriteLine("Значение свойства: " + obj.number); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы такой:
Рис.1. Результат выполнения программы
В классе MyClass для свойства number get-аксессор описан так, что результатом возвращается значение поля num. А вот в set-аксессоре использована конструкция try-catch. В try-блоке размещен блок checked, а в нем - команда
num = (byte) value; .
num = 255;
В главном методе программы командой
MyClass obj = new MyClass();
obj.number = 100;
obj.number = 300;
На следующем шаге мы резюмируем все ранее сказанное по данной теме на предыдущих шагах.