クロスプラットフォームの抽象化レイヤーとして使用している仮想マシンを対象としたオブジェクト指向言語のコンパイラを開発しています。継承されたメソッドがどのように機能するかについて、私はちょっと混乱しています。次の C# コード行があるとします。
class myObject : Object {
public int aField;
public override string ToString() {
return "Dis be mah object";
}
public void regularMethod() { }
}
Object test = new myObject();
Console.WriteLine(test.ToString());
これで、「Dis be mah object」が出力されます。しかし、regularMethod を呼び出した場合、コンパイルされたコードは実際には次のようになります。
struct myObject {
public int aField;
}
public static void regularMethod(ref myObject thisObject)
{
}
継承されたメソッド ToString は、コンパイル後にどのように処理されますか? コンパイラは、regularMethod を使用して上記で行ったことを実行できませんでした。実行した場合、「Dis be mah object」は myObject 型の作成時にのみ返され、プレーンな Object 型では返されないためです。私の推測では、構造体 myObject には、新しいインスタンスが作成されたときに割り当てられる関数ポインター/デリゲートが含まれていると思います。