Принципы объектно-ориентированного программирования

         

Идентификаторы атрибутов



Идентификаторы атрибутов

Взгляните на следующий код и попробуйте определить, что аннотирует атрибут — возвращаемое значение или метод:

class MyClass {

[HRESULT]

public long Foo(); }


Если у вас есть опыт работы с СОМ, вы должны знать, что HRESULT — это стандартный возвращаемый тип для всех методов, кроме AddRef или Release. Однако нетрудно заметить, что если имя атрибута применимо и к возвращаемому значению, и к имени метода, то компилятору будут непонятны ваши намерения. Вот несколько сценариев, -в которых компилятор не поймет ваших намерений из контекста:

  • метод или возвращаемый тип;
  • событие, поле или свойство;
  • делегат или возвращаемый тип;
  • свойство, аксессор, возвращаемое значение метода-получателя или параметр значения установщика.

В каждом из этих случаев компилятор производит определение на основе того, что считается "наиболее употребительным". Чтобы обойти такой путь принятия решения, используйте идентификаторы атрибута: assembly, module, type, method, property, event, field, param, return.

Чтобы воспользоваться идентификатором атрибута, поставьте перед именем атрибута идентификатор и двоеточие. В примере MyClass, чтобы быть уверенным в том, что компилятор сможет определить HRESULT как атрибут, аннотирующий возвращаемое значение, а не как метод, вы должны задать его следующим образом:

class MyClass {

[return:HRESULT]

public long Foo(); }



Содержание раздела