Produziert der Compiler dieselbe IL, wenn ich eine Klasse mit public int I;
(oder einem anderen Feld) erzeuge, statt eine Klasse zu erstellen, die von einer Basisklasse mit public int I;
?
In beiden Fällen verhält sich die resultierende Klasse identisch, aber verhält sich der Compiler identisch?
I.e., ist der Compiler nur Kopieren-Einfügen von Code aus Basisklassen in die abgeleiteten Klassen, oder erstellt es tatsächlich zwei verschiedene Klassenobjekte, wenn Sie erben?
%Vor%Gibt es jetzt einen Leistungsunterschied zwischen den folgenden zwei DoSomething () -Aufrufen?
%Vor%Versuchen Sie, alle Optimierungen zu ignorieren, die der Compiler für diesen speziellen Fall ausführen könnte. Meine Frage ist, ob Vererbung in C # im Allgemeinen eine damit verbundene Leistungseinbuße hat. Die meiste Zeit ist mir egal, aber manchmal möchte ich ein Stück Hochfrequenz-Code optimieren.
Was der Compiler aussendet, ist identisch; Selbst wenn eine nicht-virtuelle Instanzmethode für eine versiegelte Klasse aufgerufen wird, wird Callvirt
verwendet. Dies ist die gleiche Methode wie beim Aufruf einer Methode mit Polymorphismus.
Und nein: Es ist kein Kopieren / Einfügen - der Code, den Sie in A
geschrieben haben, bleibt als Teil von A
erhalten. Und nein, du bekommst 2 Objekte nicht nur wegen der Vererbung. Es kombiniert das Verhalten ; Eine Instanz von B
hat auch die Implementierung von A
- aber nicht über Kopieren einfügen: a B
ist auch ein A
- dh ein Dog
ist auch ein Mammal
, etc.
Tags und Links c# inheritance performance