J'ai un attribut personnalisé que j'utilise dans de nombreuses classes comme p> donc j'ai de nombreuses classes qui sont dérivées De mybaseclass strong> 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é. p> comme p> 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? p> p>
3 Réponses :
Vous devez utiliser 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> Deuxièmement, vérifiez les attributs. P> [attributUnage (hérité = true)] code> propriété de votre attribut.
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();
}
}
La question est de savoir comment utilisez-vous cet attribut? Parce que si vous avez cette situation: et que vous faites p> ca n'est pas null p> p> p>
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);
Si vous voulez chaque classe qui dérive la forme
mybaseclass code> pour hériter cet attribut, avez-vous vraiment besoin de l'Atribute? Après tout, ils héritent tous de la même classe.