接口上的自定义属性或实现它们的类?

时间:2009-01-13 13:20:14

标签: c# interface custom-attributes

当使用自定义属性来存储元数据时,最好是装饰接口,还是实现接口的类,假设任何实现接口的类在属性中都有相同的数据?

更新:基本上我正在为项目编写自定义数据存储机制,对象代表存储的各种表。 custom属性用于指定数据集中的哪个表用于存储该类的对象,还用于标识n:m关系中涉及的表。

因此,如果我将这些属性放在接口上,这是一种更清晰的方法,还是会使接口混乱并使访问数据本身更加麻烦?

2 个答案:

答案 0 :(得分:3)

这取决于场景。例如,WCF为操作契约装饰接口。

但是,如果您要讨论 objects (而不是接口本身),请注意调用代码来获取接口元数据可能会很痛苦,尤其是在类使用时显式接口实现。

装饰这个类会更加普通,但这不是同一个问题;-p

如果该属性确实特定于接口(不是实例),那么很好 - 装饰界面并谈论typeof(IFoo)等。但是如果你希望代码能够为属性设置每个类型的值,它必须在类级别。

情景是什么?

答案 1 :(得分:2)

这取决于界面是否与元数据有关。

interface IRunnable
{
    void Run();
}

class Test : IRunnable
{
    public void Run() { }
}

在此示例中,如果属性与接口的意图相关,则将属性放在接口上是有意义的。如果属性适用于所有实现,则将属性放在接口上。

但是,如果属性与类的“runnability”(与“{1}}而不是CLR”有“runnability”)无关,则将属性放在类上。

相关问题