Est-il possible de conditionnellement cacher les propriétés au moment de la compilation en .Net?
-
30-09-2019 - |
Question
Selon une directive préprocesseur, je veux mettre toutes les propriétés dans une classe à EditorBrowsableAttribute.Never.
Je pensé à créer un attribut personnalisé, dérivé de EditorBrowsableAttribute, mais malheureusement, cette classe est scellé.
J'ai eu un coup d'œil à ICustomTypeDescriptor, mais dans la méthode GetProperties, je peux mettre la main sur chaque descripteur de propriété, mais les attributs de collection est en lecture seule.
Toutes les idées?
La solution 2
Je suis tombé sur cette question encore récemment et cette fois la réponse est venue me très rapidement; tout simplement mis en place deux constantes:
Friend Class CompilerUtils
#If HideCode Then
Public Const Browsable As EditorBrowsableState = EditorBrowsableState.Never
Public Const BrowsableAdvanced As EditorBrowsableState = EditorBrowsableState.Never
#Else
Public Const Browsable As EditorBrowsableState = EditorBrowsableState.Always
Public Const BrowsableAdvanced As EditorBrowsableState = EditorBrowsableState.Advanced
#End If
End Class
Ensuite, dans votre code, décorer un membre comme ceci:
<EditorBrowsable(CompilerUtils.Browsable)> _
<EditorBrowsable(CompilerUtils.BrowsableAdvanced)> _
Autres conseils
Une approche consiste à utiliser explicitement la syntaxe #if
#if SOMECONDITION
[EditorBrowsable(EditorBrowsableState.Never)]
#endif
public int SomeProperty { get; set; }