代码之家  ›  专栏  ›  技术社区  ›  Erix

没有任何成员的接口-不好的做法[[副本]

  •  23
  • Erix  · 技术社区  · 14 年前

    可能重复:
    What is the purpose of a marker interface?

    创建一个完全空的接口是一种不好的做法,例如:

    public interface ISomething
    {
    }
    

    6 回复  |  直到 7 年前
        1
  •  25
  •   Community Tales Farias    4 年前

    我个人认为空接口不是一件好事。

    这个 design guidelines for interfaces 特别指出:

    避免使用标记接口(没有成员的接口)。

    自定义属性提供了一种标记类型的方法。有关自定义属性的详细信息,请参见编写自定义属性。如果可以将属性检查推迟到代码执行时,则首选自定义属性。如果您的场景需要编译时检查,则不能遵守此准则。

        2
  •  12
  •   Jon Skeet    14 年前

        3
  •  2
  •   barrylloyd    14 年前

    我想说属性更好,但是在.Net框架中有一些空接口的例子(例如INamingContainer)- http://msdn.microsoft.com/en-us/library/system.web.ui.inamingcontainer.aspx ).

        4
  •  2
  •   Aaron Anodide    14 年前

    在我看来,实现一个标记接口和附加一个没有参数的属性只在语法上有所不同,但是前者更直接地用于运行时类型信息。

    也就是说,如果我将第一次遇到空接口(我记得它肯定是JavaCirca2000)与第一次遇到属性(C#web服务)进行比较,我就能够 演绎

        5
  •  1
  •   Sruly    14 年前

    我同意这里的每个人。我想如果给我代码来维护,看到一个类有一个没有属性或方法的接口,我会非常困惑。

    几乎 每个请求(但不是在say和ajax请求或管理页面上)。我将该操作添加到一个基本控制器,并在ExecuteCore方法中执行它。对于我不希望它运行的少数情况,我在派生控制器中设置了一个不运行它的标志。

    当然,如果您想为所有派生类创建泛型操作,这将毫无帮助。但是在这种情况下,对象必须有一些共同点(比如一个共同属性),这意味着接口不会是空的。

        6
  •  0
  •   Nate Zaugg    14 年前

    我不这么做,但我觉得没有理由反对。我经常为泛型类型创建基类,以便包含泛型项的集合。接口可能是一种更干净的方法,但是我通常会在基类中找到一些东西,这样接口解决方案就不能解决这个问题。

    我想你可以把它看作一个抽象的基类?