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