Я хочу написать мое перечисление с пользовательскими атрибутами, например:Тип ограничение в атрибутах
public enum SomeEnum: long
{
[SomeAttribute<MyClass1>]
Sms = 1,
[SomeAttribute<MyClass2>]
Email = 2
}
но атрибуты не поддерживает генерик. Ну, наиболее похожий раствор:
public enum SomeEnum: long
{
[SomeAttribute(typeof(MyClass1))]
Sms = 1,
[SomeAttribute(typeof(MyClass2))]
Email = 2
}
А вот проблема: я хочу Class1
наследоваться от ICustomInterface
, так и с генериков я могу написать ограничение:
[AttributeUsage(AttributeTargets.All)]
class SomeAttribute<T> : Attribute where T: ICustomInterface
{
}
но атрибуты не поддерживает дженерики.
так, наконец, вопрос: как я могу проверить время компиляции (например, T
ограничений), что тип реализует некоторый интерфейс?
Я думаю, что в этом случае самый простой способ - использовать ['Type.GetInterface'] (http://msdn.microsoft.com/en-us/library/tcctb9t8 (v = vs.110) .aspx) - но вы уверены, что вам нужно это внутри атрибута *? Я бы предположил, что это более удобно, если вы * что-то делаете * с классами, имеющими этот атрибут ... – Carsten
Я уверен, что мне нужно ограничение для этого типа. Это логично вроде «AttributeUsage». Во время выполнения я могу проверить с помощью 'IsAssignableFrom', но это проверка времени выполнения. –
Материал атрибута - это всегда время выполнения - некоторые исключения из этого (AttributeUsage и т. Д.) Являются ИМО жестко закодированными в компиляторе. – Carsten