2010-06-22 4 views
3

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

[SomeAttribute] 
class MyClass 
{ 
    ... 
} 

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

ответ

3

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

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

2

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

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 
    } 
} 
Смежные вопросы