我正在为我编写的虚拟机开发面向对象语言的编译器,该虚拟机用作跨平台抽象层。我对继承的方法如何工作感到有些困惑。假设我有以下几行 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 怎么处理?编译器无法执行我在上面使用常规方法所做的事情,因为如果这样做了,那么仅在创建 myObject 类型而不是普通 Object 类型时才会返回“Dis be mah object”。我的猜测是 struct myObject 将包含一个函数指针/委托,该函数指针/委托将在创建新实例时分配。