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