가상 플랫폼을 대상으로하는 객체 지향 언어 용 컴파일러를 개발 중입니다. 크로스 플랫폼 추상화 레이어로 사용하고 있다고 썼습니다. 나는 상속 된 메서드가 어떻게 작동하는지 혼란 스럽다. 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'가 출력됩니다. 상속 된 메서드 ToString이 컴파일 후
struct myObject {
public int aField;
}
public static void regularMethod(ref myObject thisObject)
{
}
을 처리 할 것입니다 방법 : 컴파일 된 코드는 실제로 같은 것을 할 것이다 그러나 나는 regularMethod라고하면? 컴파일러는 regularMethod에서 수행 한 작업을 컴파일러에서 수행 할 수 없었습니다. 그렇다면 'mah object는 Dispose가 될 것입니다'는 myObject 유형을 생성 할 때 일반 Object 유형이 아닌 경우에만 리턴되기 때문입니다. 내 생각 엔 struct myObject는 새로운 인스턴스가 생성 될 때 할당되는 함수 포인터/델리게이트를 포함 할 것입니다.
[Late Answer] 그 방법에는 여러 가지가 있습니다. Check @ 일반적인 구현을위한 Walter Macambira 대답 – umlcat