Le contrôle sur le moment où vos métadonnées sont rendues accessibles est différent entre les deux langues.
Java fournit l'annotation java.lang.annotation.Retention et l'énumération java.lang.annotation.RetentionPolicy pour contrôler quand les métadonnées d'annotation sont accessibles. Les choix varient de Runtime
(le plus courant - les métadonnées d'annotation sont conservées dans les fichiers de classe) à Source
(métadonnées jetées par le compilateur). Vous étiquetez votre interface d'annotation personnalisée avec ceci - par exemple :
**
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CLASS)
public @interface TraceLogging {
// etc
}
vous permettrait de réfléchir sur votre annotation personnalisée TraceLogging
à l'exécution.
C# utilise l'attribut ConditionalAttribute qui est basé sur des symboles de temps de compilation. Donc l'exemple analogue en C# est :
[Conditional("TRACE")]
public class TraceLoggingAttribute : Attribute
{
// etc
}
qui amènerait le compilateur à générer les métadonnées pour votre attribut personnalisé TraceLogging
uniquement si le symbole TRACE
était défini.
NB. les métadonnées d'attribut sont disponibles par défaut à l'exécution en C# - cela n'est nécessaire que si vous voulez changer cela.
**