当前位置:  开发笔记 > 编程语言 > 正文

C#属性属性

如何解决《C#属性属性》经验,为你挑选了4个好方法。

我看过以下代码:

[DefaultValue(100)]
[Description("Some descriptive field here")]
public int MyProperty{...} 

上面的snippit的功能似乎很清楚,我不知道如何使用它来做有用的事情.我甚至不确定给它的名字!

有谁知道我在哪里可以找到有关这些属性属性的更多信息/教程?我也对这个功能可以做的任何新颖/有用的任务感兴趣.



1> James Curran..:

上面的snippit的功能看起来很清楚,

也许不是,因为许多人认为[DefaultValue()] 设置了属性的值.实际上,它只是告诉一些视觉设计师(例如Visual Studio),代码将默认值设置为什么.这样它就知道如果将其设置为其他内容,则在属性窗口中加粗值.


没有!如果未将MyProperty显式设置为某个值,则默认为0(假设为后备存储).表单设计器将值显示为"0",但加粗,表示从默认值手动更改.如果只影响表单设计器中的值的外观.

2> Marc Gravell..:

人们已经涵盖了UI方面 - 属性有其他用途,但是......例如,它们在大多数序列化框架中被广泛使用.编译器对某些属性进行了特殊处理 - 例如,[PrincipalPermission(...)]向方法添加声明性安全性,允许您(自动)检查用户是否具有适当的访问权限.

要添加自己的特殊处理,可以使用PostSharp ; 有许多使用PostSharp来执行AOP操作的很好的例子,例如日志记录 - 或者只是代码简化,例如自动INotifyPropertyChanged实现.



3> Grzenio..:

它们被称为属性,msdn中有很多信息,例如http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx

一般来说,他们不会自己"做"任何事情,它们会被其他一些使用你的类的代码所使用.XmlSerialization是一个很好的例子:XmlSerializer(由Microsoft作为框架的一部分提供)几乎可以是任何类(虽然在类上有许多要求) - 它使用反射来查看类中包含的数据.您可以使用属性(与XmlSerializer一起定义)来更改XmlSerializer序列化类的方式(例如,告诉它将数据保存为属性而不是元素).



4> Isak Savo..:

您的示例中的那些由可视化设计器(即MS Expression Blend和Visual Studio设计器)使用,以在设计器UI中提供提示.

请注意,它们是元数据,不会影响属性逻辑.DefaultValue例如,设置实例不会将属性设置为默认值,您必须手动执行此操作.

如果由于某种原因想要访问这些属性,则必须使用反射.

有关设计器属性的更多信息,请参阅MSDN.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有