【发布时间】:2013-06-15 02:19:13
【问题描述】:
我正在为我编写的虚拟机开发面向对象语言的编译器,该虚拟机用作跨平台抽象层。我对继承的方法如何工作感到有点困惑。假设我有以下几行 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 将包含一个函数指针/委托,该函数指针/委托将在创建新实例时分配。
【问题讨论】:
-
[迟到的答案] 有几种方法可以做到这一点。检查@Walter Macambira 的答案,以获得常见的实现
标签: oop compiler-construction compiler-theory