En réponse à this question J'ai essayé d'utiliser Type.GetCustomAttributes(true)
sur une classe qui implémente une interface qui a un attribut défini dessus. J'ai été surpris de découvrir que GetCustomAttributes
n'a pas retourné l'attribut défini sur l'interface. Pourquoi pas? Les interfaces ne font-elles pas partie de la chaîne d'héritage?Dans .Net, pourquoi les attributs ne sont-ils pas déclarés sur les interfaces retournées lors de l'appel de Type.GetCustomAttributes (true)?
Exemple de code:
[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
{
}
Sorties: Rien
Ok, c'est logique. Je n'avais pas pensé à comment permettre cela serait comme l'ouverture de la boîte de vers de l'héritage multiple. Bonne réponse! –
Merci! J'aime répondre aux questions avec plus de questions. :) – cdhowie