【问题标题】:Custom attributes on interfaces or the classes that implement them?接口上的自定义属性或实现它们的类?
【发布时间】:2009-01-13 13:20:13
【问题描述】:
在使用自定义属性存储元数据时,最好装饰接口还是实现接口的类,假设任何实现接口的类在属性中都具有相同的数据?
更新:基本上我正在为项目编写自定义数据存储机制,对象代表正在存储的各种表。自定义属性用于指定数据集中的哪个表用于存储该类的对象,以及标识哪些表涉及到 n:m 关系。
那么,如果我把属性放在界面上,这是一种更清晰的方法,还是它会使界面混乱,使访问数据本身更加麻烦?
【问题讨论】:
标签:
c#
interface
custom-attributes
【解决方案1】:
这取决于场景。例如,WCF 为操作契约装饰接口。
但是,如果您要谈论对象(而不是接口本身),请注意调用代码来获取接口元数据可能会很痛苦,尤其是如果类使用显式接口实现。
装饰班级会更常见,但这不是同一个问题;-p
如果属性确实是特定于 interface(而不是实例),那么很好 - 装饰界面并谈论 typeof(IFoo) 等。但是如果您希望代码能够设置-type 属性值,它必须在类级别。
场景是什么?
【解决方案2】:
这取决于接口是否与元数据有关。
interface IRunnable
{
void Run();
}
class Test : IRunnable
{
public void Run() { }
}
在此示例中,如果属性与界面的意图相关,则将属性放在界面上是有意义的。如果属性适用于所有实现,则将属性放在接口上。
但是,如果属性与类的“可运行性”(与“可运行性”与 IRunnable 而非 CLR 相关)无关,则将属性放在类上。