Какое использование имеют атрибуты общих параметров? - PullRequest
16 голосов
/ 31 января 2011

Допустимо (т. Е. Он компилируется и запускается) для помещения атрибута в универсальный параметр для класса или метода:

public class MyClass<[My] T>
{
    private void MyMethod<[My] T>()
    {}
}

public class MyAttribute : Attribute
{}

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

Это всего лишь причуды / побочные эффекты спецификации языка или есть действительная / полезная причина для помещения атрибута в эту позицию?

Ответы [ 2 ]

13 голосов
/ 31 января 2011

По той же причине атрибуты полезны для любой конструкции; они предоставляют метаданные, которые могут использоваться Reflection или другими постпроцессорами для выполнения различных задач. Например, у вас может быть система AOP, которая использует атрибут в аргументе типа для применения определенных ограничений времени выполнения, которые иначе не могли бы быть выражены. Я не уверен, существуют ли системы, которые на самом деле используют эти атрибуты для каких-либо действий, но нет никаких оснований запрещать их использование в качестве метаданных.

1 голос
/ 31 января 2011

Я уверен, что некоторые гайки AOP найдут вескую причину для украшения общих параметров с атрибутами.Я, конечно, не могу думать ни о чем.Попробуйте это:

typeof(MyClass<>).GetGenericArguments().GetCustomAttributes().OfType<MyAttribute>();

Если этот Enumerable имеет какие-либо элементы, то можно получить доступ к атрибуту, который вы поместили в универсальный параметр класса.Если нет, то вы не можете и, следовательно, иметь данные, к которым вы ожидаете получить доступ из любого другого класса в вашей кодовой базе, бессмысленно.ОДНАКО, у них все еще может быть код, который выполняется при создании экземпляра, и они создаются средой выполнения, когда универсальный класс входит в область видимости, позволяя вам выполнять аспектно-ориентированную логику в самом атрибуте.То, что это было бы, и как это могло бы отличаться от непосредственного украшения общего класса или метода, оставлено в качестве упражнения для людей, которые поклоняются АОП гораздо больше, чем я.

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