Шаг 232.
Язык программирования C#. Начала.
Обработка исключений. Использование исключений. Пример 5

    На этом шаге мы рассмотрим еще один пример использования исключений.

    Следующая программа содержит класс 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 будет иметь место переполнение, то сгенерируется исключение класса OverflowException. Для обработки этого исключения предназначен catch-блок, в котором командой
  num = 255;
полю num присваивается максимально возможное значение 255.

    В главном методе программы командой

  MyClass obj = new MyClass();
создается объект obj класса MyClass. Проверка показывает, что при выполнении команды
  obj.number = 100;
полю num присваивается значение 100, а при выполнении команды
  obj.number = 300;
это поле, как и ожидалось, получает значение 255.

    На следующем шаге мы резюмируем все ранее сказанное по данной теме на предыдущих шагах.




Предыдущий шаг Содержание Следующий шаг