2009-03-05 4 views

Antwort

1

Sie übergeben schließlich einen Zeiger auf das Objekt, das einen Zeiger auf die Vtable enthält. Nun, im Grunde genommen. Diese

0

ist eine Implementierung Detail, so dass ich glaube, Sie nicht darauf verlassen sollte! :)

btw, es gibt nicht so etwas wie „eine Schnittstelle in Parameter übergeben“. Sie übergeben immer eine Objektreferenz, die keine, eine oder mehrere Schnittstellen implementieren kann.

+0

Achten Sie auf einige Post auf Raymond Chens Blog in ein paar Jahren, weil er über eine alte Anwendung schreiben wird, die sich darauf verlassen hat! – OregonGhost

+0

@OregonGhost: Ahah, sehr wahr! – Brann

6

Sie übergeben eine Referenz (nach Wert). Die genaue Darstellung eines Verweises ist implementierungsspezifisch, aber in den meisten Fällen wird es ein Zeiger sein :)

Weitere Informationen finden Sie unter http://yoda.arachsys.com/csharp/parameters.html.

(Ich bin auf einem Telefon im Moment - wenn jemand den Link umformatieren könnte das wäre hilfreich :)

1

ich eine ganze Reihe von Beiträgen über getan haben, was genau passiert, wenn Sie eine Methode aufrufen in IL. Die Reihe beginnt bei http://www.simple-talk.com/community/blogs/simonc/archive/2010/11/01/95464.aspx

Kurz gesagt, wird ein nativer Zeiger auf den Stapel geschoben, der in den Heap am Anfang der Objektinstanz zeigt (der Sync-Block-Index, gefolgt vom Typ-Zeiger, gefolgt von der Feldwerte der Instanz). Die CLR wird über den Typzeiger an die v-Tabelle geleitet.

Verwandte Themen