C # именование пользовательских атрибутов - PullRequest
11 голосов
/ 01 апреля 2011

У меня есть собственный класс Attribute, который я определил как:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public sealed class MyCustomAttribute : System.Attribute
{
    ...
}

С сайта Microsoft:

По соглашению, название Атрибут класса заканчивается словом Атрибут. Хотя это и не требуется, это конвенция рекомендуется для читаемость. Когда атрибут применяется, включение слова Атрибут необязательный.

Таким образом, атрибут может быть использован либо

[MyCustom()]

или

[MyCustomAttribute()]

Мой вопрос ко всем вам: возникали ли у кого-нибудь проблемы с использованием сокращенной версии имени против полного имени? Я использую 4.0 Framework.

Спасибо!

Ответы [ 4 ]

12 голосов
/ 01 апреля 2011

Нет проблем.

Под скомпилированным IL к имени всегда добавляется атрибут (полное имя типа).

Исходя из ECMA-334 (C # spec) 24.2, разрешение выполняется сначала путем точного соответствия, а затем путем добавления «Атрибута» к имени, указанному в []. Кроме того, если существует конфликт (например, MyAttribute и MyAttributeAttribute), при использовании «MyAttribute» возникает ошибка времени компиляции.

9 голосов
/ 01 апреля 2011

Все должно быть в порядке ... Я бы посоветовал вам не вводить два атрибута, имена которых отличаются только количеством суффиксов атрибутов:

public class FooAttribute : Attribute { }

public class FooAttributeAttribute : Attribute { }

[FooAttribute] // Could be either!

Я подозреваю, точное совпадение выиграет здесь, но, пожалуйста, не вводите двусмысленность в первую очередь. (Я не проверял спецификацию.)

1 голос
/ 01 апреля 2011

Неа. Легко, как пирог!

Кроме того, вы можете использовать его без пустых () скобок

0 голосов
/ 01 апреля 2011

В общем, у вас не должно быть проблем. Компилятор C # достаточно умен, чтобы в любом случае преобразовать его в правильный тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...