C#中的interface 其实是一种协议(Protocol)。在MSDN的接口(C#)中是如下定义的:An interface contains only the signatures of methods, properties, events or indexers.很明显,这里没有提到接口方法具有多态特性——这与Java中interface方法具有天然多态效应不一定。C# interface的接口默认为public,且不能具有virtual特性[1]。有些奇怪的实现方法,会强迫接口表现出多态性,我个人是不喜好的。偏门的且违背本意的的东西尽量不碰,甚至不去理解学习——恰如当年都不去看goto章节一样。
这只能让我得出结论,C#的interface只是一种契约(Contract),一种协议(Protocol)。
在MSDN的编程C#编程指南关于多态[2]的表述中,也没有提到接口。其中关于多态的两个表现特征的描述之一如下:
“
基类可以定义并实现虚方法,派生类可以重写这些方法,即派生类提供自己的定义和实现。在运行时,客户端代码调用该方法,CLR 查找对象的运行时类型,并调用虚方法的重写方法。因此,你可以在源代码中调用基类的方法,但执行该方法的派生类版本。[2]
”
即在基类与子类间,利用virtual & override 实现多态特性。
[1] C# interface, https://msdn.microsoft.com/zh-cn/library/87d83y5b.aspx
[2] 多态, https://msdn.microsoft.com/zh-cn/library/ms173152.aspx