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

为什么我们要使用无成员接口?

  •  7
  • Canavar  · 技术社区  · 15 年前

    编写没有成员的接口有什么意义?

    INamingContainer 是.NET框架中的一个示例。在msdn中描述为:

    标识一个容器控件,该控件 在 页面对象的控件层次结构。这个 仅是标记接口。

    是否仅用于此类块:

    if (myControl is INamingContainer)
    {
        // do something
    }
    

    或者它还有其他的优点吗?

    编辑: 它被称为 Marker Interface Pattern (感谢普雷特)

    4 回复  |  直到 15 年前
        1
  •  8
  •   Jonathan Parker    15 年前

    这是为了确保您可以将对象集合视为同一类型,然后对该类型执行一些操作(您知道它必须从对象继承)。

    把它想象成属性。它是元数据类型。

    您还可能希望对已知类型(例如System.Web.UI.Control)执行操作,但仅当类型继承自某个接口(例如InamingContainer)时才执行该操作。

    foreach(var ctrl in this.Controls)
    {
        if (ctrl is INamingContainer)
        {
            // Do something on the control
        }
    }
    
        2
  •  10
  •   Dmitri Nesteruk    15 年前

    无成员接口用于在C中提供类似于mixin的功能。因此,对于A级:

    class A : B { ... }
    

    通过定义接口ISTUFF,您可以为它提供额外的功能(a-la多重继承):

    interface IStuff {}
    

    然后在一个:

    class A : B, IStuff { ... }
    

    然后添加额外的功能

    class Methods {
      public static void Something(this IStuff stuff) {
        // some functionality here
      }
    }
    
        3
  •  8
  •   Preet Sangha    15 年前

    它是一个标记接口。它可以用来修饰类型,这样您就可以在运行时发现类型是正确的,而不用反射。我们使用它来确保被调用方中的泛型类型是正确的。

        4
  •  3
  •   Pete Kirkham    15 年前

    把那些认为鸭子打字很酷的蟒蛇搞混了。