我什么时候应该在C#中使用属性?

时间:2010-02-19 09:17:33

标签: c# attributes

我看到了一些有利用属性的例子,例如: (作为动态工厂的地图) http://msdn.microsoft.com/en-us/magazine/cc164170.aspx

只是想知道使用属性有什么好处? 我可以在http://msdn.microsoft.com/en-gb/z0w1kczw(VS.80).aspx找到参考 但是,我不确定何时以及为什么要尝试使用它。

5 个答案:

答案 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链接了解详情。