Реализация инкапсуляции при помощи традиционных методов доступа и изменения

Давайте вновь обратимся к нашему классу Employee. Если мы хотим, чтобы внешний мир смог работать с внутренними данными этого класса (пусть это будет только одна переменная fullName, для которой используется тип данных string), то традиционный подход рекомендует создание метода доступа (accessor, или get method) и метода изменения (mutator, или set method). Набор таких методов может выглядеть следующим образом:

// Определение традицонных методов доступа и изменения для закрытой переменной public class Employee

{

private string fullName:

....

// Метод доступа

public string GetFullName() {return fullName; }

// Метод изменения

public void SetFullName (string n)

{

// Логика для удаления неположенных символов (!. @. #. $. % и прочих

// Логика для проверки максимальной длины и прочего

fullName = n;

}

}

Такой подход требует наличия двух методов для взаимодействия с каждой из переменных. Вызов этих методов может выглядеть следующим образом:

// Применение методов доступа и изменения

public static int Main(string[ ] args)

{

Employee p = new Employee();

p.SetFullName(“Fred");

Console.WriteLine(“Employee is named: " + p.GetFullName());

}

Второй способ инкапсуляции: применение свойств класса

Помимо традиционных методов доступа и изменения для обращения к закрытым членам класса можно также использовать свойства (properties). В Visual Basic и СОМ свойства — это привычный инструмент. Свойства позволяют имитировать доступ к внутренним данным класса: при получении информации или внесении изменений через свойство синтаксис выглядит так же, как при обращении к обычной открытой переменной. Но на самом деле любое свойство состоит из двух скрытых внутренних методов. Преимущество свойств заключается в том, что вместо того, чтобы использовать два отдельных метода, пользователь класса может использовать единственное свойство, работая с ним так же, как и с открытой переменной-членом данного класса:

// Обращ ение к имени сотрудника через свойство

public static int Main(string[ ] args)

{

Employee p = new Employee();.

// Устанавливаем значение

p.EmpID = 81;

// Получаем значение

Console.WriteLine(“Person ID is: {0}", p.EmpID);

return 0;

}

Если заглянуть внутрь определения класса, то свойства всегда отображаются в «реальные» методы доступа и изменения. А уже в определении этих методов вы можете реализовать любую логику (например, для устранения лишних символов, проверки допустимости вводимых числовых значений и прочего). Ниже представлен синтаксис класса Employee с определением свойства EmpID:

// Пользовательское свойство EmpID для доступа к переменной empIDi

public class Employee

{

private int empID;

// Свойство для empID

public int EmpID

{


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: