我应该什么时候在C#中使用属性?
我看到了一些使用属性的例子,例如(作为dynamic工厂的地图) http://msdn.microsoft.com/en-us/magazine/cc164170.aspx
只是想知道什么是使用属性的优势? 我可以findhttp://msdn.microsoft.com/en-gb/z0w1kczw(VS.80).aspx上的参考,但是,我不知道何时,为什么我应该尝试使用它。
在.NET Framework中,可以使用属性的原因很多 – 比如
-
定义哪些类是可序列化的
-
select在Web服务中公开哪些方法
Attributes
允许我们在devise时向类,属性和方法添加descriptions
,然后可以在运行时通过reflection来检查。
考虑这个例子:
假设你有一个从老版本开始的方法,它仍然以任何理由被使用,现在你已经想出了一个新版本的类,这个类使用了generics列表和LINQ,并且有一个类似的新方法。 您希望开发人员更喜欢在库的更高版本中提供的新版本。 你会怎么做? 一种方法是在文档中写入。 更好的方法是使用属性如下。
public class AccountsManager { [Obsolete("prefer GetAccountsList", true)] static Account[] GetAccounts( ) { } static List<Account> GetAccountsList( ) { } }
如果在编译程序时使用了obsolete
方法,开发人员将获得这些信息并据此作出决定。
AccountManager.GetAccounts()已过时:更喜欢GetAccountsList
我们也可以根据需要创build和添加Custom Attributes
。
参考:
- 在C#中使用属性
希望这可以帮助
我的build议是:使用属性来说明机制的事实 ,但不能模拟您的业务领域的方面 。
更多细节:
http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx
如果要将元数据附加到类或类成员,以及应用常见行为而不必为共享行为的每个单元实现特定接口,则属性是适当的。 后者是面向方面编程的一个例子。
考虑一个属性作为它所属的方法或属性的元数据。 它讲述了更多关于成员的内容。
.NET Framework预定义并使用属性types来控制应用程序的运行时行为。
考虑[webmethod]属性,在运行时框架parsing这个属性,并确定这个方法将暴露在一个web服务。
同样,您可以编写自定义属性来在运行时控制应用程序的行为。 属性可以定位类,方法,属性,委托,枚举,事件,字段…
要在运行时parsing该属性,您必须使用reflection。
检出MSDN链接以获取更多详细信息。