Поделиться через


Рефакторинг для инкапсуляции поля (C#)

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

Если поле имеет модификатор public, то остальные объекты имеют прямой доступ к этому полю и могут изменять его незаметно для объекта, которому принадлежит это поле.Используя свойства для инкапсуляции полей, можно запретить прямой доступ к полям.

Чтобы создать новое поле, операция Инкапсуляция поля заменяет модификатор доступа поля, которое нужно инкапсулировать, на private и затем генерирует для этого поля методы доступа get и set.В некоторых случаях генерируется только метод доступа get, например, если поле объявлено доступным только для чтения.

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

Чтобы создать из поля свойство

  1. Создайте консольное приложение с именем EncapsulateFieldExampleи затем замените Program следующим примером кода.

    class Square
    {
        // Select the word 'width' and then use Encapsulate Field.
        public int width, height;
    }
    class MainClass
    {
        public static void Main()
        {
            Square mySquare = new Square();
            mySquare.width = 110;
            mySquare.height = 150;
            // Output values for width and height.
            Console.WriteLine("width = {0}", mySquare.width);
            Console.WriteLine("height = {0}", mySquare.height);
        }
    }
    
  2. в Редактор кодапоместите курсор в объявлении на имени поля, которое требуется инкапсулировать.В приведенном ниже примере расположите курсор на слове width:

    public int width, height;
    
  3. В меню Оптимизация выберите пункт Инкапсуляция поля.

    Откроется диалоговое окно Инкапсулировать поле.

    Кроме того, диалоговое окно Инкапсуляция поля можно открыть нажатием на клавиатуре сочетания клавиш CTRL+R, E.

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

  4. Задайте параметры.

  5. Нажмите клавишу ВВОД или кнопку ОК.

  6. Если выбрать параметр Предварительный просмотр изменений ссылок, то откроется окно Предварительный просмотр изменений ссылок.Нажмите кнопку Применить.

    В файле исходного кода отобразятся следующие коды методов доступа get и set:

    public int Width
    {
        get { return width; }
        set { width = value; }
    }
    

    Код метода Main также будет обновлен, и в нем появится имя нового свойства Width.

    Square mySquare = new Square();
    mySquare.Width = 110;
    mySquare.height = 150;
    // Output values for width and height.
    Console.WriteLine("width = {0}", mySquare.Width);
    

Заметки

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

Для объявлений, содержащих объявление нескольких полей, операцией Инкапсуляция поля в качестве разграничителя полей используется запятая. Операция "инкапсуляция поля" запускается в отношении поля, находящегося ближе всего к курсору и в той же строке, что и курсор.Можно также указать поля, которые нужно инкапсулировать, выбрав имя этого поля в объявлении.

Генерируемый этой операцией рефакторинга код моделируется функцией фрагментов кода "инкапсуляция кода".Фрагменты кода являются изменяемыми.Дополнительные сведения см. в разделе Фрагменты кода.

См. также

Ссылки

Фрагменты кода Visual C#

Основные понятия

Рефакторинг (C#)