某所にて
「インターフェースに対して拡張メソッドでメソッドを追加するようにすれば、
事実上多重継承が実現できます」
ってゆーてた。えー、どゆことソレ? って突っ込んでみたところ:
interface Iほげらぶる {};
static class ほげらぶる実装 {
public static void ほげ(this Iほげらぶる hoge) {
Console.WriteLine("ほげほげー");
}
}
interface Iぱよらぶる {};
static class ぱよらぶる実装 {
public static void ぱよ(this Iぱよらぶる payo) {
Console.WriteLine("ぱよぱよー");
}
}
class ぺも : Iほげらぶる, Iぱよらぶる {
public static void Main() {
ぺも p = new ぺも();
p.ほげ();
p.ぱよ();
}
}
なるほど、拡張メソッドによってインタフェースに実装を貼り付けることが
できるんだから、実装の貼り付いたインタフェースを多重継承すれば双方の
実装を継承できるってわけか。
でもねー、シグニチャがカブったらどないすんのよ。
interface IMachine {};
static class MachineImpl {
public static void move(this IMachine machine) {
Console.WriteLine("計算機がモーターを制御します");
}
}
interface IHuman {};
static class HumanImpl {
public static void move(this IHuman human) {
Console.WriteLine("神経系が筋肉を制御します");
}
}
class Android : IMachine, IHuman {
public void move() {
Console.WriteLine("ギコギコ歩きますー");
}
public static void Main() {
Android RTI = new Android();
RTI.move();
}
}
Androidがmoveを再定義できるから破綻は免れたけども...
これでも多重継承できたというてえぇのやろうか。意見求ム。