Инкапсуляция

Инкапсуляция – один из базовых принципов объектно-ориентированного программирования, позволяющий изолировать данные какого-либо объекта от остального кода программы.

Для пример определим класс Rectangle с двумя открытыми полями:

// Класс Rectangle для описания прямоугольников
class Rectangle
{
    // высота прямоугольника
    public int _height;

    // ширина прямоугольника
    public int _width;
}

Теперь в программе мы можем создать переменную типа Rectangle и попытаться задать параметры прямоугольника:

using System;

class Program
{
    static void Main() 
    {
        Rectangle rectangle = new Rectangle();
        rectangle._height = 10;
        rectangle._width = -1;
    }
}

Обратите внимание, в 9 строке кода мы задали отрицательное значение для ширины прямоугольника. Наша текущая реализация класса Rectangle позволяет нам это сделать. Для того что бы избавиться от этой возможность перепишем класс Rectangle используя возможность инкапсуляции C#:

// Класс Rectangle для описания прямоугольников
class Rectangle
{
    // высота прямоугольника
    // теперь для переменной используется модификатор доступа private
    private int _height;

    // ширина прямоугольника
    // теперь для переменной используется модификатор доступа private
    private int _width;

    /* Свойство Height теперь используется вместо
    *  поля _height. В нем мы можем описать логику
    *  изменения закрытого поля */
    public int Height {
        get {
            return _height;
        }
        set {
            // Проверка допустимости значения
            if ( value >= 0 )
                _height = value;
        }
    }

    // Свойство Width вместо закрытого поля _width
    public int Width {
        get {
            return _width;
        }
        set {
            // Проверка допустимости значения
            if ( value >= 0 )
                _width = value;
        }
    }
}

Свойства C#, как один из механизмов инкапсуляции, позволяют контролировать установку значений внутренним полям и реагировать на ошибки соответствующим образом.

avatar
5000
  Подписаться  
Уведомление о