Итак, как же компилятор позволяет вызывать метод с помощью стандартного синтаксиса
объект.поле!
И откуда берется переменная
value"!
Чтобы ответить на эти вопросы, взглянем на MSIL-код, сгенерированный компилятором. Сначала рассмотрим метод-получатель свойства. В следующем примере определен такой метод-получатель:
class Address
{
protected string city; protected string zipCode; public string ZipCode {
get {
return zipCode;
} >
>
Взглянув на MSIL, получившийся из этого метода, вы увидите, что компилятор создал метод-аксессор
getJZipCode,
как показано ниже:
.method public hidebysig specialname instance string. get_ZipCode() cil managed
{
// размер 11 (Oxb)
.maxstack 1
.locals ([0] string _Vb_t_$00000003$00000000)
IL.OOOO: ldarg.0
IL_0001: Idfld string Address::zipCode
IL_0006: stloc.O
IL_0007: br.s IL_0009
IL_0009: ldloo.0
ILJWOa: ret } // конец метода Address::get_ZipCode
Вы можете сообщить имя метода-аксессора, поскольку компилятор добавляет к имени префикс
get_
(в случае метода-получателя) или
set_
(в случае метода-установщика). В результате следующий код разрешается как вызов
get__ZipCode: