日期:2014-05-17  浏览次数:20969 次

C#接口中是否有虚函数?
接口中能否定义虚方法?
如:我在接口A中定义了一个方法a,在类B中实现接口A,创建类B的一个对象b,
然后:A IA=b,b.a();
调用的将是类B中实现的方法a,这个过程和多态好像啊?
但是,貌似在接口中没有声明为虚方法?
请知道的帮忙解答下,谢谢。

------解决方案--------------------
接口的实现是通过 Interface Map来做到的。
而多态是通过Visual Table来实现的,两者都能实现动态绑定(迟后联编)的功能,但原理却也不是一样。
可参考WinDeg+SOS对 CLR的分析。

至于interface中定义方法是不行的。

------解决方案--------------------
所谓虚方法,指的是你在基类中可以有默认的实现 ,但在派生类中可重写,但interface中是不能有任何方法的实现的,所以它不能有虚 方法
------解决方案--------------------
virtual是用来修饰实在存在的方法的,并且可以在子类中重写,interface中声明方法只是为了让类实现该方法,virtual放在这里没有意义