【问题标题】: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 相关)无关,则将属性放在类上。

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 2021-09-30
        • 2018-09-06
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        相关资源
        最近更新 更多