Существует ли целевой атрибут «get:»?

#c# #attributes

#c# #атрибуты

Вопрос:

В документах Microsoft я заметил следующий пример:

 [get: System.Security.SecurityCritical]
public virtual System.Windows.Media.Imaging.BitmapSource Thumbnail { get; }
  

Обратите внимание, что к атрибуту применяется целевой атрибут « get: «.

Однако в их документации по C # такой цели нет. Они перечисляют только:

assembly, module, field, event, method, param, property, return, type

Я не вижу ничего зависящего от версии ни на одной из этих страниц.


Кроме того, спецификация языка C # также не включает get: ни того, ни другого (стр. 395).


Я все равно попытался использовать его в примере в VS 2015, и IDE сообщила об ошибке:

‘get’ не является распознанным местоположением атрибута. Допустимыми местоположениями атрибутов для этого объявления являются ‘property’. Все атрибуты в этом блоке будут проигнорированы.

get: Допустимо ли при некоторых обстоятельствах? Это ошибка в их документации?


К вашему сведению, очень сложно, если не невозможно, выполнить поиск строки «get:» в SO. Я ожидал, что уже найду ответ на этот вопрос, но из-за этого было довольно сложно это сделать.

Комментарии:

1. В исходном коде так не написано. Я полагаю, что это ошибка в коде, который генерирует документацию из исходного кода.

2. @NineBerry это кажется довольно убедительным, подумайте о добавлении ответа?

Ответ №1:

Я ничего не могу найти о get: target, но можно применить атрибут только к get части свойства или другим атрибутам на set и get . Пожалуйста, смотрите пример ниже

 [AttributeUsage(AttributeTargets.Method)]
public class MyAttributeAttribute : Attribute
{
    private readonly string name;

    public MyAttributeAttribute(string name)
    {
        this.name = name;
    }
}

public class Test
{
    public int Value
    {
        [MyAttribute("Get")]get;
        [MyAttribute("Set")]set;
    }
}
  

Редактировать:
Также dotPeek декомпилятор показывает мне Thumbnail свойство, подобное

 public virtual BitmapSource Thumbnail
{
  [SecurityCritical] get
  {
  

похоже, что get: цель не существует

Ответ №2:

Как указал @nineberry, пример в документации, показанный в вопросе, не совпадает с фактическим кодом .NET Framework. Вопрос имеет:

 [get: System.Security.SecurityCritical]
public virtual System.Windows.Media.Imaging.BitmapSource Thumbnail { get; }
  

Но фактический код является:

 public virtual BitmapSource Thumbnail
        {
            [SecurityCritical ]
            get
            {
                ...
  

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

На сегодняшний день, как показывает документация, это:

 public virtual System.Windows.Media.Imaging.BitmapSource Thumbnail 
{ [System.Security.SecurityCritical] get; }
  

который согласуется с кодом и не использует эфемерную get: цель.

Это кажется довольно убедительным, что такой цели нет (и никогда не было).