为什么要在代码中使用“自定义属性”(.NET)

时间:2011-10-24 15:48:39

标签: c# .net attributes

任何人都可以解释在代码中使用自定义属性的好处(或原因)。当然我在某些场景(WCF,序列化等)中使用(并理解定义属性的目的),但我无法想象我需要创建和使用我自己的任何算法自定义属性。有人可以提供一个真实案例,其中自定义属性的用法为项目带来了一些东西。

8 个答案:

答案 0 :(得分:9)

与WCF等相同的原因,但是特定于您的项目的东西 - 您想要向某些成员(类型,字段,方法等)添加一些元数据以指定所涉及的机制,并且它不是由现有属性覆盖。

例如,NUnit想要添加他们自己的指示,即特定类型包含单元测试 - 没有这样的现有属性,因此他们创建了TestFixtureAttribute

这是一个相对罕见的事件,当然 - 但它可能会发生。

答案 1 :(得分:3)

如果你想编写自己的系统,如WCF,序列化等......

如果您编写的代码可以迭代类型或成员并使用它们执行操作,那么您经常需要使用自己的自定义属性将某些成员标记为不同或特殊。

答案 2 :(得分:2)

我经常使用自定义.Net属性来支持基础架构中的工具。一个例子是从.Net时代的早期开始(确切地说是C#1.0)。我正在开展一个研究项目,该项目有一个原生的C ++前端和一个全新的C#后端。

前端和后端共享一个非常相似的对象模型,它的发展非常迅速。我不想手工编写C ++前端模型,C ++序列化机制和C#序列化机制,而是选择将C#类型归为自定义属性。他们告诉我模型的部分在前端和后端之间共享。

一旦这些属性到位,我就写了一个快速而又脏的工具

  • 解析构建核心共享模型的属性
  • 生成C#序列化代码
  • 生成C ++代码
  • 生成C ++序列化代码

这使得我的模型在我的2个项目之间保持最新变得简单。只需更改C#代码,编译并重新运行我的工具即可。

答案 3 :(得分:2)

我在我开发的一个自定义AOP(面向方面​​编程)系统中使用了注释。属性对于控制代码生成等正交问题也非常有用。

答案 4 :(得分:1)

它们可用于标记测试,例如MBUnit。它们对于检查和加载类(如插件系统)以提供元信息的代码也很有用。

答案 5 :(得分:1)

答案 6 :(得分:1)

它们在构建对象映射器/ ORM工具时非常有用。如果你决定推出自己的地图系统,他们几乎“需要”获得所需的所有功能。它更多地用于使方法/类更通用,并使用反射来确定如何处理对象/选择对象/等...

答案 7 :(得分:0)

为您提供我使用过它们的具体案例。我曾经不得不与Mainframe screenscraper进行交互。我创建了一个自定义属性来注释我想从我的类发送到大型机的字段,不在约定之外的名称,处理格式和集合的特殊规则。然后,我有一个类能够反映实例并实现需要与主机屏幕刮刀适当交互的字段子集。