собствнно сабж. Суть такая: пусть есть атрибут. и его скажем нужно давать "прикреплять" (кстати, как эот по научному зовется?) только к классам, наследующих определеный интерфейс. например:
| Код |
/* чегоб такого тут , или не тут написать, чтобы приклеить этот атрибут можно было только к классам наследникам INeedThisInterface ? */ [AttributeUsage(AttributeTargets.Class)] class MyAttribute : Attribute { private readonly string m_s; public MyAttribute(string s) { m_s = s; } public string S { get { return m_s; } } }
[MyAttribute("some abstract class")] class abstract SomeClass : INeedThisInterface { public virtual string S { get { Type t = this.GetType(); Object[] attribs = t.GetCustomAttributes(false); foreach (Attribute attrib in attribs) { if (attrib is MyAttribute) { return ((MyAttribute)attrib).S; } } return string.Empty(); } } }
/* this class provide property S, it must return "some otherclass" string... */ [MyAttribute("some otherclass")] class SomeOtherClass : SomeClass { }
|
|