1. 问题初现
今天,查看《接口继承的声明问题》一文的反馈,发现Ninputer留下这样一道题:
如果有
class A : Interface1
那么
class B : A, Inteface1
和
class B : A
会出现什么不同的情况呢。编译器在IL级别是用什么手段实现这个功能的呢?
2. 探索问题 & 理解问题
解决问题的过程既是一个探索的过程也是一个推理论证的过程。OK,下面我尝试用反证法来探索这个问题。
首先,我假设问题中B类的两种继承方式有着一样的效果,并试着寻找它们的不一样。为了了解这两种方式的效果,我把上面代码补充完整:
interface IC { }
class A : IC { }
class B1 : A { }
class B2 : A, IC { }
class Program
{
static void Main()
{
A a = new A();
B1 b1 = new B1();
B2 b2 = new B2();
Console.WriteLine(a is IC);
Console.WriteLine(b1 is A);
Console.WriteLine(b1 is IC);
Console.WriteLine(b2 is A);
Console.WriteLine(b2 is IC);
}
}
代码运行的结果是:
True
True
True
True
True
时间: 2024-11-02 00:52:22