我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
当前回答
在我的脑海中,这里是一个快速列表,大致按使用频率排序,列出了我在一个大型项目中实际使用的预定义属性(约50万个LoC):
标志,可串行化,WebMethod,COMVisible,TypeConverter,Conditional,ThreadStatic,Obsolete,InternalsVisibleTo,DebuggerStepThrough。
其他回答
我总是将DisplayName、Description和DefaultValue属性用于我的用户控件、自定义控件或我将通过属性网格编辑的任何类的公共财产。.NET PropertyGrid使用这些标记来设置未设置为默认值的名称、描述面板和粗体值的格式。
[DisplayName("Error color")]
[Description("The color used on nodes containing errors.")]
[DefaultValue(Color.Red)]
public Color ErrorColor
{
...
}
如果找不到XML注释,我只希望Visual Studio的IntelliSense将Description属性考虑在内。这样可以避免同一句话重复两次。
只有少数属性获得编译器支持,但AOP中有一个非常有趣的属性用法:PostSharp使用您定制的属性将IL注入到方法中,允许各种功能。。。log/trace是一些微不足道的示例,但其他一些好的示例是自动INotifyPropertyChanged实现(此处)。
一些发生并直接影响编译器或运行时:
[条件(“FOO”)]-只有在生成期间定义了“FOO“符号时,才会调用此方法(包括参数求值)[MethodImpl(…)]-用于指示一些事情,如同步、内联〔PrincipalPermission(…)〕-用于将安全检查自动注入代码[TypeForwardedTo(…)]-用于在程序集之间移动类型,而不重新生成调用方
对于通过反射手动检查的东西,我非常喜欢System.ComponentModel属性;像[TypeDescriptionProvider(…)]、[TypeConverter(…)】和[Editor(…)]]这样的东西可以完全改变数据绑定场景中类型的行为(即动态财产等)。
在我看来,过时是框架中最有用的属性之一。对不应再使用的代码发出警告的功能非常有用。我喜欢有一种方法告诉开发人员不应该再使用某些东西,也喜欢有一个方法来解释为什么,并指出更好的/新的做法。
Conditional属性对于调试使用也非常方便。它允许您在代码中添加用于调试的方法,这些方法在构建解决方案以供发布时不会被编译。
然后,我发现有很多特定于Web控件的属性很有用,但这些属性更具体,在我发现的服务器控件开发之外没有任何用处。
这是一篇关于有趣属性InternalsVisibleTo的文章。它基本上模仿了C++朋友访问功能。它对于单元测试非常方便。
我使用最多的属性是与XML序列化相关的属性。
XmlRoot
Xml元素
XmlAttribute
等
在进行任何快速而肮脏的XML解析或序列化时非常有用。