当使用自定义属性来存储元数据时,最好是装饰接口,还是实现接口的类,假设任何实现接口的类在属性中都有相同的数据?
更新:基本上我正在为项目编写自定义数据存储机制,对象代表存储的各种表。 custom属性用于指定数据集中的哪个表用于存储该类的对象,还用于标识n:m关系中涉及的表。
因此,如果我将这些属性放在接口上,这是一种更清晰的方法,还是会使接口混乱并使访问数据本身更加麻烦?
答案 0 :(得分:3)
这取决于场景。例如,WCF为操作契约装饰接口。
但是,如果您要讨论 objects (而不是接口本身),请注意调用代码来获取接口元数据可能会很痛苦,尤其是在类使用时显式接口实现。
装饰这个类会更加普通,但这不是同一个问题;-p
如果该属性确实特定于接口(不是实例),那么很好 - 装饰界面并谈论typeof(IFoo)
等。但是如果你希望代码能够为属性设置每个类型的值,它必须在类级别。
情景是什么?
答案 1 :(得分:2)
这取决于界面是否与元数据有关。
interface IRunnable
{
void Run();
}
class Test : IRunnable
{
public void Run() { }
}
在此示例中,如果属性与接口的意图相关,则将属性放在接口上是有意义的。如果属性适用于所有实现,则将属性放在接口上。
但是,如果属性与类的“runnability”(与“{1}}而不是CLR”有“runnability”)无关,则将属性放在类上。