编写没有成员的接口有什么意义?
INamingContainer是.NET Framework中的一个示例.它在MSDN中描述为:
标识在Page对象的控件层次结构中创建新ID命名空间的容器控件.这只是一个标记界面.
它只用于这种块:
if (myControl is INamingContainer) { // do something }
还是有其他优点吗?
编辑:它被称为标记界面模式(感谢Preet)
无成员接口用于在C#中提供类似mixin的功能.所以给出了A类:
class A : B { ... }
您可以通过定义接口IStuff为其提供额外的功能(a-la multiple inheritance):
interface IStuff {}
然后在A中'实施'它:
class A : B, IStuff { ... }
然后添加额外的功能
class Methods { public static void Something(this IStuff stuff) { // some functionality here } }
这是为了确保您可以将对象集合视为相同类型,然后对该类型执行某些操作(您知道它必须从对象继承).
把它想象成属性.它是类型元数据.
您还可能希望对已知类型(例如System.Web.UI.Control)执行操作,但仅在类型继承自某个接口(例如INamingContainer)时才执行该操作.
foreach(var ctrl in this.Controls) { if (ctrl is INamingContainer) { // Do something on the control } }
它是一个标记界面.它可以用来装饰类型,这样你就可以在运行时找出它的类型是正确的而不使用反射.我们使用它来确保被调用者中的泛型类型是正确的.