2010-10-14 9 views
3

En fonction d'une directive de préprocesseur, je souhaite définir toutes les propriétés d'une classe sur EditorBrowsableAttribute.Never.Est-il possible de masquer conditionnellement les propriétés au moment de la compilation dans .Net?

J'ai pensé à créer un attribut personnalisé, dérivé de EditorBrowsableAttribute, mais malheureusement cette classe est scellée. J'ai jeté un oeil à ICustomTypeDescriptor, mais dans la méthode GetProperties, je peux obtenir chaque descripteur de propriété, mais la collection d'attributs est en lecture seule.

Des idées?

+1

Il y a pas beaucoup d'intérêt dans ce domaine, à peu près tous les programmeurs .NET a réflecteur. –

+0

Ce n'est pas de protéger totalement une classe, je sais que ce n'est pas possible. J'ai une version d'exécution d'un assemblage, et le moins que je puisse faire est de cacher partiellement les membres. – Jules

Répondre

1

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 

Puis dans votre code, décorez un membre comme ceci:

<EditorBrowsable(CompilerUtils.Browsable)> _ 
<EditorBrowsable(CompilerUtils.BrowsableAdvanced)> _ 
3

Une approche consiste à utiliser explicitement la syntaxe #if

#if SOMECONDITION 
[EditorBrowsable(EditorBrowsableState.Never)] 
#endif 
public int SomeProperty { get; set; } 
+0

Je sais que je peux le faire, mais j'essaie d'éviter de le faire pour tous les membres. Il semble également désordonné, c'est pourquoi il aurait été agréable de pouvoir créer une classe dérivée de EditorBrowsableAttribute, contenant l'instruction #if. Je décorerais alors chaque membre avec l'attribut personnalisé. – Jules

Questions connexes