Ich habe ein paar kleine Zweifel mit Klassen und Objekten.
In einer Klasse habe ich 10 bis 20 Methoden, (unten geteilt)
%Vor%Beim Erstellen eines Objekts für die oben genannte Klasse. Wie viele Methoden werden gespeichert? Nur die aufrufende Methode oder alle Methoden.
%Vor%Können Sie mir bitte bei dem obigen Szenario helfen?
Keine.
Die Methoden werden nicht im Speicher erstellt , wenn Sie ein Objekt instanziieren, sondern nur die Felder und Eigenschaften.
Die Assembly, die die Methoden enthält, wird geladen, sobald auf einen Teil der Assembly verwiesen wird.
Methoden werden nur dann in den Speicher kompiliert, wenn sie aufgerufen werden. Der JIT (Just-In-Time-Compiler) wandelt die Methoden zu diesem Zeitpunkt von IL in Maschinencode um.
Für eine Instanz wird nur eine Methode erstellt.
Sie können diese Artilce beziehen: In .NET Framework-Interna bohren, um zu sehen, wie die CLR Laufzeitobjekte erstellt
Jede Klasse und Schnittstelle wird, wenn sie in eine AppDomain geladen werden im Speicher durch eine MethodTable-Datenstruktur dargestellt. Das ist ein Ergebnis der Klassenladeaktivität vor der ersten Instanz der Objekt wird jemals erstellt. Während ObjectInstance den Status darstellt, MethodTable repräsentiert das Verhalten. MethodTable bindet das Objekt Instanz zu den sprachkompilergenerierten speicherkartenbasierten Metadaten Strukturen durch EEClass. Die Informationen in der MethodTable und der Von ihm abhängende Datenstrukturen können über verwalteten Code aufgerufen werden durch System.Type. Ein Zeiger auf die MethodTable kann sogar erfasst werden in verwaltetem Code über die Type.RuntimeTypeHandle-Eigenschaft. TypeHandle, das in der ObjectInstance enthalten ist, verweist auf ein Offset vom Anfang der MethodTable. Dieser Offset beträgt 12 Byte standardmäßig und enthält GC-Informationen, die wir hier nicht diskutieren.
wie viele Methoden im Speicher gespeichert werden
Alle. Alle Methoden werden im Speicher gespeichert.
Was noch wichtiger ist, sie werden alle einmal erstellt, unabhängig von der Anzahl der Instanzen.
Also ist diese Aussage nicht präzise: "während ein Objekt für die obige Klasse erstellt wurde ...".
Jeder Assembliertyp erstellt eine Methode im Speicher - Methoden werden nicht für jede Instanz erstellt / kopiert.
Beim Laden der Assembly werden also alle Methoden erstellt und im Speicher gespeichert, und dann wird nur a1
für objcls
instance aufgerufen.