何时使用属性而不是属性?

时间:2009-02-16 07:17:08

标签: c#

是否有特定情况应该在类而不是属性上使用自定义属性? 我知道属性是可取的,因为它们的发现性和性能,但是属性......我什么时候应该绝对使用它们?

更新:

Here是Eric Lippert关于此决定的帖子。

2 个答案:

答案 0 :(得分:13)

Eric Lippert正在great blog post处理这个决定。

他的总结是:

  

简而言之:使用属性来描述您的机制,使用属性来为域建模。

我还要补充一点,即属性值实际上是静态的 - 换句话说,它是类型描述的一部分,而不是类型的任何实例。

当某个基类型的每个实例都必须具有属性(例如描述)时,可能会遇到一个棘手的问题,但是不同的具体派生类型希望在每个类型而不是每个实例上指定描述。您经常会得到总是返回常量的虚拟属性 - 这并不是非常令人满意。我怀疑Delphi的类引用可能在这里帮助......不确定。

编辑:举一个机制的例子,如果你装饰一个类型来说明它来自数据库中的哪个表,那就是描述数据传输机制而不是说任何有关正在传输的数据模型的内容。

答案 1 :(得分:0)

有两种用例:

1)使用其他人定义的自定义属性,例如可以在Main方法上使用的System.LoaderOptimization属性。这些类型的属性用于指导平台代码(如CLR,WPF,WCF或调试器)以某种方式运行代码,并且有时非常有用。阅读各种平台主题的书籍是了解何时以及如何使用这些属性的好方法。

2)创建自己的自定义属性并使用它来装饰类(或方法,属性等)。除非您还有使用Reflection注意这些属性用法并以某种方式更改行为的代码,否则它们不起作用。应尽可能避免这种用法,因为性能非常差,比访问类的静态成员要大几个数量级。