Ограничение атрибута для универсального типа в .net? - PullRequest
3 голосов
/ 23 июня 2010

в .net, если у меня есть универсальный класс SomeClass<T>, возможно ли использовать ключевое слово where, чтобы требовать, чтобы T был классом с определенным атрибутом?что-то вроде:

[SomeAttribute]
class MyClass
{
    ...
}

class AnotherClass<T> where T : Attribute(SomeAttribute)
{
    ...
}

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Нет, это невозможно.

Самое близкое, что вы можете сделать, это потребовать, чтобы класс реализовал определенный интерфейс.

2 голосов
/ 23 июня 2010

Нет, вы не можете, но вы можете обойти это, проверив атрибут в статическом конструкторе:

public class MyType<T> {
    static MyType() {
        // not compile checked, something like:
        if (!Attribute.IsDefined(typeof(T), typeof(MyAttribute))
            throw new ArgumentException();   // or a more sensible exception
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...