Wenn Sie eine Schnittstelle oder eine Instanz einer Klasse als Parameter übergeben, übergeben wir viele Objekte oder die vollständige vtable, weil, sobald Sie eine Methode für die Instanz aufrufen müssen, die vtable recurse und rufen Sie die richtige rechts?
Wie funktioniert das?in .NET übergeben Sie eine Klasseninstanz/Schnittstelle als Parameter übergeben Sie ein Objekt oder die vollständige vtable
Antwort
Sie übergeben schließlich einen Zeiger auf das Objekt, das einen Zeiger auf die Vtable enthält. Nun, im Grunde genommen. Diese
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.
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 :)
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.
- 1. Sidekiq: übergeben Sie ein Objekt als Parameter
- 2. übergeben Sie ein Javascript-Getter als Parameter
- 3. Wie übergeben Sie ein Container.DataItem als Parameter?
- 4. Übergeben Sie ein Objekt (. NET oder JSON-Objekt) als Eingabeparameter der postgresql -Funktion
- 5. Übergeben Sie Methode als Parameter in Groovy
- 6. Übergeben Sie eine Funktion als Parameter in Netlogo
- 7. Objekt als Parameter an ActionListener übergeben
- 8. Übergeben Sie eine Elternklasse als Parameter an eine Funktion
- 9. Wie Sie eine System.Drawing.Size als Parameter an eine Methode übergeben
- 10. Eine Methode als Parameter übergeben
- 11. Ist es besser, eine * Schnittstelle * oder ein * Objekt * als Parameter an eine Funktion zu übergeben?
- 12. Übergeben Sie die String-Liste als Parameter an die Konsolenanwendung
- 13. Objekt als Parameter an jQuery-Dialog übergeben?
- 14. Angular 2, volles Objekt als Parameter übergeben
- 15. Übergeben Sie ein anderes Objekt an die Hauptflasche Anwendung
- 16. Übergeben Sie ein Array als Attribut-Wert-
- 17. Scala-Klasse als Parameter übergeben?
- 18. Wie übergeben Sie eine lokale Struktur als Parameter an pthread_create?
- 19. Übergeben der Vorlagenklasse als Parameter
- 20. Übergeben Sie System.Type als Parameter an eine generische Methode
- 21. Übergeben Sie ein Objekt in eine Soap-Anfrage
- 22. Übergeben Sie eine JSP-Variable als Parameter an JavaScript-Funktion
- 23. C# eine Liste als Parameter-Funktion übergeben
- 24. Klasse als Parameter übergeben
- 25. Übergeben Sie eine Liste von Typen als generischer Parameter
- 26. Können Sie eine Klasse (kein Objekt) als Parameter an eine Methode in Python übergeben?
- 27. So übergeben Sie benutzerdefinierte Variable als URL-Parameter in WordPress
- 28. Übergeben Sie ein Tupel an eine Hilfsklasse
- 29. Übergeben Sie ein Array als Vorlage
- 30. Übergeben Sie Netzwerkanmeldeinformationen per .net Remoting
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
@OregonGhost: Ahah, sehr wahr! – Brann