我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?

您在项目中实际使用的预定义属性(及其名称空间)是什么?


当前回答

如果项目不在您的解决方案中,[EditorBrowsable(EditorBrowsableState.Never)]允许您对IntelliSense隐藏财产和方法。非常有助于隐藏流畅接口的无效流。您希望多长时间使用GetHashCode()或Equals()?

对于MVC,[ActionName(“Name”)]允许您使用相同的方法签名进行Get操作和Post操作,或者在操作名称中使用破折号,否则,如果不为其创建路由,就无法实现这一点。

其他回答

在我的脑海中,这里是一个快速列表,大致按使用频率排序,列出了我在一个大型项目中实际使用的预定义属性(约50万个LoC):

标志,可串行化,WebMethod,COMVisible,TypeConverter,Conditional,ThreadStatic,Obsolete,InternalsVisibleTo,DebuggerStepThrough。

它的名称不好,在框架中也不受支持,不应该需要参数,但这个属性是不可变类的有用标记:

[ImmutableObject(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]

告诉设计器展开财产,这些属性是(控件的)类

[Obfuscation]

指示混淆工具对程序集、类型或成员执行指定的操作。(尽管通常使用程序集级别[Assembly:ObfuscateAssemblyAttribute(true)]

[Serializable]始终用于将对象序列化到外部数据源(如xml)或从远程服务器序列化对象。在这里了解更多信息。

当您在调试期间将鼠标悬停在Type的实例上时,[DuggerDisplay]对于快速查看该类型的自定义输出非常有用。例子:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

这是它在调试器中的外观:

此外,值得一提的是,设置了CacheDuration属性的[WebMethod]属性可以避免不必要地执行web服务方法。