J'ai essayé de créer un attribut personnalisé .NET avec le code ci-dessous mais laissé accidentellement la sous-classe. Cela a généré une erreur de compilateur facilement fixe indiquée dans le commentaire.
[Serializable, ComVisible(true), AttributeUsage(AttributeTargets.Class, Inherited=true)] public sealed class AttributeUsageAttribute : Attribute { ...
3 Réponses :
attributeUSAGAttribute code> est juste une classe magique (comme
attribut code> est). Ceci est une règle de compilateur intégrée et vous ne pouvez pas faire quelque chose comme ça pour vos propres attributs. P>
Je voudrais être capable de spécifier que mon attribut personnalisé ne peut être placé que sur des sous-classes d'une classe (ou d'une interface) particulière. Est-ce possible? P>
En fait, il existe un moyen de le faire pour les sous-classes (mais pas d'interfaces) à l'aide de
protégé code> - voir restreindre l'utilisation d'attributs . Reproduire le code (mais pas la discussion): p>
xxx pré> blockquote>
Excellent, merci! Pour être honnête, je n'ai jamais envisagé de faire cela avant d'avoir eu l'erreur du compilateur mais je vais certainement votre solution.
avec Restomer Vous pouvez utiliser [jetbrains.annotations.basetypequiité (typeof (YoubaSetype))] Code> P>
Cette restriction est parfois un signe que vous devriez utiliser une interface de marqueur à la place. Il effectue les mêmes fonctions, sauf lorsque vous devez passer des métadonnées de niveau de classe comme paramètre. Donc, si les cas peuvent tout aussi facilement fournir, un nombre de quelque chose, l'interface peut nécessiter une propriété publique qui. Si cela doit être au niveau de la classe, vous êtes coincé avec des attributs.