是否有可能在.Net的编译时有条件地隐藏属性?

时间:2010-10-14 15:30:54

标签: c# .net vb.net typedescriptor

根据预处理程序指令,我想将类中的所有属性设置为EditorBrowsableAttribute.Never。

我考虑过创建一个从EditorBrowsableAttribute派生的自定义属性,但遗憾的是该类是密封的。

我看过ICustomTypeDescriptor,但在GetProperties方法中,我可以获取每个属性描述符,但属性集合是readonly。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

一种方法是明确使用#if语法

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

答案 1 :(得分:1)

我最近又遇到过这个问题,而这次答案很快就传到了我身上;只需设置几个常量:

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

然后在你的代码中,装饰一个像这样的成员:

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