我看到了一些有利用属性的例子,例如: (作为动态工厂的地图) http://msdn.microsoft.com/en-us/magazine/cc164170.aspx
只是想知道使用属性有什么好处? 我可以在http://msdn.microsoft.com/en-gb/z0w1kczw(VS.80).aspx找到参考 但是,我不确定何时以及为什么要尝试使用它。
答案 0 :(得分:31)
在.NET Framework中,可以出于多种原因使用属性 - 例如
定义哪些类 可序列化
选择公开的方法 网络服务
Attributes
允许我们在设计时将descriptions
添加到类,属性和方法中,然后可以在运行时通过反射进行检查。
考虑这个例子:
假设你有一个类,它有一个旧版本的方法,由于任何原因仍然在使用,现在你已经提出了一个新版本的类,它很好地使用了通用列表和LINQ并且有一个新的方法出于类似的目的。您希望开发人员更喜欢库的更高版本中提供的新版本。你会怎么做?一种方法是在文档中写入。更好的方法是使用属性如下。
public class AccountsManager
{
[Obsolete("prefer GetAccountsList", true)]
static Account[] GetAccounts( ) { }
static List<Account> GetAccountsList( ) { }
}
如果在编译程序时使用obsolete
方法,开发人员会获取此信息并相应地做出决定。
AccountManager.GetAccounts()已过时: 更喜欢GetAccountsList
我们还可以根据要求创建和添加Custom Attributes
。
参考:
希望这有帮助
答案 1 :(得分:23)
我的建议:使用属性来陈述关于机制的事实,而不是模拟业务领域的方面。
更多详情:
http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx
答案 2 :(得分:6)
如果要将元数据附加到类或类成员,以及应用公共行为而不必为共享行为的每个单元实现某个接口,则属性是合适的。后者是aspect-oriented programming的一个例子。
答案 3 :(得分:4)
将属性视为有关其所属方法或属性的元数据。它讲述了一个关于成员的更多信息。
答案 4 :(得分:1)
.NET Framework预定义并使用属性类型来控制应用程序的运行时行为。
考虑[webmethod]属性,在运行时框架解析此属性并确定此方法将在Web服务中公开。
同样,您可以编写自定义属性来控制应用程序在运行时的行为。属性可以定位类,方法,属性,委托,枚举,事件,字段......
要在运行时解析属性,必须使用反射。
查看MSDN链接了解详情。