0
votes

Attribuer un attribut de niveau de classe à la classe de base et il faut également affecter toutes les classes dérivées.

J'ai un attribut personnalisé xxx

que j'utilise dans de nombreuses classes comme xxx

donc j'ai de nombreuses classes qui sont dérivées De mybaseclass et il y aura de nombreux changements si je veux ajouter cet attribut dans toutes les classes. Ce que je veux, c'est que j'ajouterais cet attribut à ma classe de base et que toutes les catégories dérivées devraient également avoir le même attribut qui leur est attribué.

comme xxx

Mais cela ne résout pas le problème, mes classes enfants n'ont toujours pas l'attribut ajouté. Y a-t-il quelque chose que je puisse y parvenir?


1 commentaires

Si vous voulez chaque classe qui dérive la forme mybaseclass pour hériter cet attribut, avez-vous vraiment besoin de l'Atribute? Après tout, ils héritent tous de la même classe.


3 Réponses :


3
votes

Vous devez utiliser [attributUnage (hérité = true)] code> propriété de votre attribut. xxx pré>

mais sa valeur par défaut est vraie et la classe dérivée doit être disponible pour votre attribut personnalisé. Je recommande un exemple de bloc ci-dessous pour vous assurer. P>

Premièrement, définissez les attributs. P> xxx pré>

Deuxièmement, vérifiez les attributs. P>

class Program {
    static void Main(string[] args) {
        Type typeA = typeof(DerivedA);
        Console.WriteLine($"DerivedA has Inherited attribute: {typeA.GetCustomAttributes(typeof(InheritedAttribute), true).Length > 0}");
        MethodInfo memberA = typeA.GetMethod(nameof(DerivedA.MethodA));
        Console.WriteLine($"DerivedA.MemberA has Inherited attribute: {memberA.GetCustomAttributes(typeof(InheritedAttribute), true).Length > 0}\n");

        Type typeB = typeof(DerivedB);
        Console.WriteLine($"DerivedB has NotInherited attribute: {typeB.GetCustomAttributes(typeof(NotInheritedAttribute), true).Length > 0}");
        MethodInfo memberB = typeB.GetMethod(nameof(DerivedB.MethodB));
        Console.WriteLine($"DerivedB.MemberB has NotInherited attribute: {memberB.GetCustomAttributes(typeof(NotInheritedAttribute), true).Length > 0}");

        Console.Read();
    }
}


0 commentaires

1
votes

La question est de savoir comment utilisez-vous cet attribut? Parce que si vous avez cette situation: xxx

et que vous faites xxx

ca n'est pas null


0 commentaires

1
votes

Les deux solutions ont fonctionné pour moi - @ddfra et @gurkan.

J'ai modifié mon code comme celui-ci pour obtenir la liste des attributs, et cela fonctionne aussi. P>

var attributesList = GetType().GetCustomAttributes<CustomAttribute>(inherit: true);


0 commentaires