Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Внутреннее представление свойств в C#

Внутреннее представление свойств в C#

Многие программисты (особенно те, которые привыкли использовать C++) стремятся использовать традиционные префиксы get_ и set_ для методов чтения и модификации (например, get_FullName() и set_FullName()). Против самого соглашения возражений нет. Однако следует знать, что "за кадром" свойства в C# представляются программным кодом CIL, использующим такие же префиксы. Например, если открыть компоновочный блок Employees.exe с помощью ildasm.exe, вы увидите, что каждое свойство XXX на самом деле сводится к скрытым методам get_XXX()/set_XXX() (рис. 4.6).


Рис. 4.6. Отображение свойств XXX в скрытые методы get_XXX() и set_XXX()

Предположим теперь, что тип Employee имеет частный член-переменную с именем empSSN для представления номера социальной страховки работника. Эта переменная устанавливается через параметр конструктора, а для управления этой переменной используется свойство SocialSecurityNumber.

// Добавление поддержки нового поля, представляющего SSN-код.

public class Employee {
 …
 // Номер социальной страховки (SSN).
 private string empSSN;
 public Employes (string fullName, int age, int empID, float currPay, string ssn) {
  …
  this.empSSN = ssn;
 }
 public string SocialSecurityNumber {
  get { return empSSN; }
  set { empSSN = value; }
 }
 public void DisplayStats() {
  …
  Console.WriteLine("SSN: {0} ", empSSN);
 }
}

Если бы вы также определили два метода get_SocialSecurityNumber() и set_SocialSecurityNumber(), то получили бы ошибки компиляции.

// Свойство в C# отображается в пару методов get_/set_.
public class Employee {
 // ОШИБКА! Уже определены самим свойством!
 public string get_SocialSecurityNumber() { return empSSN; }
 public void set_SocialSecurityNumber(string val) { empSSN = val; }
}

Замечание. В библиотеках базовых классов .NET всегда отдается предпочтение свойствам типа (в сравнении с традиционными методами чтения и модификации). Поэтому, чтобы строить пользовательские типы, которые хорошо интегрируются с платформой .NET, следует избегать использования традиционных методов get и set.

Оглавление книги


Генерация: 1.157. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз