我看过以下代码:
[DefaultValue(100)] [Description("Some descriptive field here")] public int MyProperty{...}
上面的snippit的功能似乎很清楚,我不知道如何使用它来做有用的事情.我甚至不确定给它的名字!
有谁知道我在哪里可以找到有关这些属性属性的更多信息/教程?我也对这个功能可以做的任何新颖/有用的任务感兴趣.
上面的snippit的功能看起来很清楚,
也许不是,因为许多人认为[DefaultValue()] 设置了属性的值.实际上,它只是告诉一些视觉设计师(例如Visual Studio),代码将默认值设置为什么.这样它就知道如果将其设置为其他内容,则在属性窗口中加粗值.
人们已经涵盖了UI方面 - 属性有其他用途,但是......例如,它们在大多数序列化框架中被广泛使用.编译器对某些属性进行了特殊处理 - 例如,[PrincipalPermission(...)]
向方法添加声明性安全性,允许您(自动)检查用户是否具有适当的访问权限.
要添加自己的特殊处理,可以使用PostSharp ; 有许多使用PostSharp来执行AOP操作的很好的例子,例如日志记录 - 或者只是代码简化,例如自动INotifyPropertyChanged
实现.
它们被称为属性,msdn中有很多信息,例如http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx
一般来说,他们不会自己"做"任何事情,它们会被其他一些使用你的类的代码所使用.XmlSerialization是一个很好的例子:XmlSerializer(由Microsoft作为框架的一部分提供)几乎可以是任何类(虽然在类上有许多要求) - 它使用反射来查看类中包含的数据.您可以使用属性(与XmlSerializer一起定义)来更改XmlSerializer序列化类的方式(例如,告诉它将数据保存为属性而不是元素).
您的示例中的那些由可视化设计器(即MS Expression Blend和Visual Studio设计器)使用,以在设计器UI中提供提示.
请注意,它们是元数据,不会影响属性逻辑.DefaultValue
例如,设置实例不会将属性设置为默认值,您必须手动执行此操作.
如果由于某种原因想要访问这些属性,则必须使用反射.
有关设计器属性的更多信息,请参阅MSDN.