#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:
цель.
Это кажется довольно убедительным, что такой цели нет (и никогда не было).