为什么要使用自定义属性'在你的代码(. net)

本文关键字:代码 net 自定义属性 为什么 | 更新日期: 2023-09-27 18:12:20

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

为什么要使用自定义属性'在你的代码(. net)

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

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

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

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

如果您编写的代码迭代类型或成员并对其进行操作,您将经常希望使用自己的自定义属性来标记某些成员为不同的或特殊的

我经常使用自定义的。net属性来支持我的基础结构中的工具。一个例子发生在。net时代的早期(确切地说是c# 1.0)。我当时正在做一个研究项目,这个项目有一个本地的c++前端和一个全新的c#后端,这是我的同事写的。

前端和后端共享一个非常相似的对象模型,该模型正在快速发展。由于不想手工编写c++前端模型、c++序列化机制和c#序列化机制,我选择用自定义属性为c#类型赋予属性。他们告诉我模型中前端和后端共享的部分。

设置好这些属性后,我编写了一个快速而粗糙的工具

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

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

我在不久前开发的自定义AOP(面向方面编程)系统中使用了注释。属性对于控制诸如代码生成之类的正交关注点也非常有用。

自定义验证是一个非常好的用例,可以从这些链接中看到:

http://odetocode.com/blogs/scott/archive/2011/02/21/custom-data-annotation-validator-part-i-server-code.aspx

如何创建自定义数据注释验证器

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

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

给你一个我使用它们的具体例子。我曾经不得不与大型机屏幕刮板进行交互。我创建了一个自定义属性来注释我想要从类发送到Mainframe的字段、不符合约定的名称、处理格式和集合的特殊规则。然后我有了一个类,它能够反映实例,并意识到需要哪些字段子集与大型机屏幕刮板进行适当的交互。