[问题]: CA实现IA那么CAFoo前面需要override吗?
答案是否定的在C#中继承和实现是截然不同的两个概念尽管在语法上很相似继承意味着全盘接收基类的函数而实现只是一个契约保证当前类会提供interface中声明的函数而不会接受基类的函数(事实上也不能因为interface中没有函数的实现)
[问题]: CA实现IA那么CAFoo前面需要virtual吗?
答案是需要的否则的话CA的子类将无法覆写Foo下面的代码是CAFoo的IL声明我们发现了关键字final(注这里的final是IL语言的关键字和C#中sealed有些类似意味着子类不能override当前函数)
method public hidebysig newslot virtual final
instance voidFoo() cil managed
下面一段代码紧接着上面的代码读者可以猜测一下输出看看是否掌握了本文今天讲述的内容我会在下期博客中讲解其原委并且和大家进一步通过IL来研究NET中的虚函数
class CB : CA IA{
public void Foo() {
ConsoleWriteLine(CBFoo);
}
}
class Test {
public static void InvokeFoo(CA ia){
caFoo();
}
public static void Main() {
InvokeFoo(new CA());
InvokeFoo(new CB());
}
[] [] []