我应该什么时候在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链接以获取更多详细信息。