E 'possibile condizionalmente proprietà nascondere in fase di compilazione a .Net?
-
30-09-2019 - |
Domanda
A seconda di una direttiva del preprocessore, voglio impostare tutte le proprietà in una classe a EditorBrowsableAttribute.Never.
ho pensato di creare un attributo personalizzato, derivato da EditorBrowsableAttribute, ma purtroppo quella classe è sigillata.
Ho avuto uno sguardo al ICustomTypeDescriptor, ma nel metodo GetProperties, posso entrare in possesso di ogni descrittore di proprietà, ma gli attributi di raccolta è di sola lettura.
Tutte le idee?
Soluzione 2
mi è capitato in tutta la questione ancora una volta di recente e questa volta la risposta mi è venuta molto rapidamente; è sufficiente impostare un paio di costanti:
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
Poi nel codice, decorare un membro in questo modo:
<EditorBrowsable(CompilerUtils.Browsable)> _
<EditorBrowsable(CompilerUtils.BrowsableAdvanced)> _
Altri suggerimenti
Un approccio è quello di utilizzare in modo esplicito il #if
sintassi
#if SOMECONDITION
[EditorBrowsable(EditorBrowsableState.Never)]
#endif
public int SomeProperty { get; set; }