【发布时间】:2011-10-24 15:48:39
【问题描述】:
谁能解释在您的代码中使用自定义属性的好处(或原因)。当然,我在某些场景(WCF、序列化等)中使用(并理解其目的)定义的属性,但我无法想象我需要创建和使用任何算法我自己的自定义属性。有人可以提供一个真实案例,其中自定义属性的使用为项目带来了一些东西。
【问题讨论】:
标签: c# .net attributes
谁能解释在您的代码中使用自定义属性的好处(或原因)。当然,我在某些场景(WCF、序列化等)中使用(并理解其目的)定义的属性,但我无法想象我需要创建和使用任何算法我自己的自定义属性。有人可以提供一个真实案例,其中自定义属性的使用为项目带来了一些东西。
【问题讨论】:
标签: c# .net attributes
与 WCF 等的原因相同,但某些特定于您的项目 - 您想向某些成员(类型、字段、方法等)添加一些元数据以指定有关所涉及机制的某些内容,这不是被现有属性覆盖。
例如,NUnit 想要添加自己的指示,表明特定类型包含单元测试 - 没有这样的现有属性,因此他们创建了 TestFixtureAttribute。
这是一个相对罕见的事件,当然 - 但它可能会发生。
【讨论】:
如果您想编写自己的系统,如 WCF、序列化等...
如果您编写的代码对类型或成员进行迭代并对其进行处理,您将经常希望使用自己的自定义属性将某些成员标记为不同或特殊。
【讨论】:
我经常使用自定义 .Net 属性来支持我的基础架构中的工具。一个例子来自 .Net 时代的早期(准确地说是 C# 1.0)。我正在从事一个研究项目,该项目有一个本地 C++ 前端和一个由你真正编写的全新 C# 后端。
前端和后端共享一个非常相似的对象模型,并且发展非常迅速。不想同时编写 C++ 前端模型、C++ 序列化机制和 C# 序列化机制的代码,我选择将我的 C# 类型赋予自定义属性。他们告诉我模型的前端和后端共享的部分。
一旦有了这些属性,我就编写了一个快速而肮脏的工具
这让我的模型在我的两个项目之间保持最新变得非常简单。只需更改 C# 代码,编译并重新运行我的工具。
【讨论】:
我在不久前开发的自定义 AOP(面向方面编程)系统中使用了注解。属性对于控制代码生成等正交问题也非常有用。
【讨论】:
它们可用于标记测试,例如在 MBUnit 中。它们对于检查和加载类(如插件系统)以提供元信息的代码也很有用。
【讨论】:
它们在构建对象映射器/ORM 工具方面也非常有用。如果您决定推出自己的地图系统,则几乎“需要”它们才能获得所需的所有功能。它更多地用于使方法/类更通用,并使用反射来确定如何处理对象/选择对象/等...
【讨论】:
给你一个我使用它们的具体案例。我曾经不得不与大型机屏幕截图进行交互。我创建了一个自定义属性来注释我想从我的类发送到大型机的字段、不符合约定的名称、处理格式和集合的特殊规则。然后我有一个类,它能够反映实例并意识到需要哪些字段子集才能与大型机屏幕抓取工具进行适当的交互。
【讨论】: