おまけ。メンバの明示的な実装をつけた場合。
using System;
namespace ConsoleApp
{
interface IA
{
string Who();
}
class B : IA
{
public string Who() { return "B"; }
}
class C : B, IA
{
public new string Who() { return "C"; }
string IA.Who() { return "C (explicit)"; }
}
class Program
{
static void Main()
{
C c = new C();
CallC(c); CallB(c); CallA(c);
}
static void CallC(C c)
{
Console.WriteLine("そのまま : " + c.Who());
}
static void CallB(B b)
{
Console.WriteLine("B に変換 : " + b.Who());
}
static void CallA(IA a)
{
Console.WriteLine("IA に変換 : " + a.Who());
}
}
}
結果 :
そのまま : C
B に変換 : B
IA に変換 : C (explicit)
やはり完全に継承できるようにするには、仮想メンバにするしかないのか。