Als Antwort auf this question habe ich versucht Type.GetCustomAttributes(true)
für eine Klasse zu verwenden, die eine Schnittstelle implementiert, für die ein Attribut definiert ist. Ich war überrascht zu entdecken, dass GetCustomAttributes
das an der Schnittstelle definierte Attribut nicht zurückgegeben hat. Warum nicht? Sind Schnittstellen nicht Teil der Vererbungskette?In .Net, warum werden Attribute, die für Interfaces zurückgegeben werden, nicht zurückgegeben, wenn Type.GetCustomAttributes (true) aufgerufen wird?
Beispielcode:
[Attr()]
public interface IInterface { }
public class DoesntOverrideAttr : IInterface { }
class Program
{
static void Main(string[] args)
{
foreach (var attr in typeof(DoesntOverrideAttr).GetCustomAttributes(true))
Console.WriteLine("DoesntOverrideAttr: " + attr.ToString());
}
}
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class Attr : Attribute
{
}
Ausgänge: Nichts
Ok, das macht Sinn. Ich hatte nicht darüber nachgedacht, wie das möglich wäre, als würde ich die Mehrfachvererbung von Würmern öffnen. Gute Antwort! –
Danke! Ich beantworte gerne Fragen mit mehr Fragen. :) – cdhowie