Frage

Ich frage mich, ob es irgendwelche Unterschiede zu abgeleiteten Klassen sind, wenn vs reale Klassen für die Vererbung abstrakt mit?

Es sieht für mich wie die reale Klassenvererbung eine Hierarchie während abstrakter Klassenvererbung erstellt wird nur für die Compiler Copy-Paste-Code abgeleiteten Klassen?

Ist die abstrakte Klasse eine Hierarchie erzeugt? Kann es ein spezielles Schlüsselwort zugegriffen werden mit?

Ich weiß, dass Sie das Basis-Schlüsselwort verwenden, die Basisklasse zugreifen, aber abstrakte Mitglieder sehen genauso aus wie die ursprünglichen Mitglieder in den abgeleiteten Klassen?

Schließlich, was ist der Unterschied in der Leistung zwischen 2?

War es hilfreich?

Lösung

Ja die abstrakte Klasse existiert - der Compiler keine Copy-Paste macht. Sie werden keinen Performance-Unterschied finden, obwohl als CLR noch virtuelle Methodenaufrufe tun müssen.

Zum Beispiel der folgenden C #:

abstract class Foo { }

class Bar : Foo { }

erzeugt folgende IL:

.class private abstract auto ansi beforefieldinit Foo
    extends [mscorlib]System.Object { }

.class private auto ansi beforefieldinit Bar
    extends Foo { }

Das Konzept einer abstrakten Art ist sehr viel ein Teil der IL.

Andere Tipps

Der einzige Unterschied besteht darin, dass eine abstrakte Basisklasse nicht ohne abgeleitet instantiiert werden wird, während eine nicht-abstrakte einer Dose. Aus der Sicht einer abgeleiteten Klasse, ist alles gleich.

Abstrakte Klassen und konkrete Klassen sind beiden Werkzeuge für (OO) Modellierung. Es gibt keinen Unterschied in Bezug auf die Vererbung und Substitutionsregeln. Es gibt ein paar technischen Details:

  • Eine abstrakte Klasse kann nicht sein, instanziiert
  • Abstrakte Methoden sind nur in abstrakten Klassen erlaubt

Aber eine abstrakte Klasse kann nicht-abstrakte Methoden, Eigenschaften und Felder.

Die Leistung wird nicht auf die Klassen verwendet, aber es gibt eine kleine Strafe für abstrakte / virtuelle Methoden.

Die Macht der abstrakten Klasse ist darin unimplementation. Es kann für das Vertrauen verwendet werden, dass Instanz von abgeleiteten Klassen die volle benötigte Funktionalität

Abstrakte Klasse ist eine primitive Form einer Basisklasse. Diese können nicht instanziiert werden, was bedeutet, der Entwickler von diesen Klassen leiten ihre Funktionalität zu nutzen. Jede abstrakte Methode in der abstrakten Klasse definiert wird, muss in der untergeordneten Klasse implementiert werden. So kann man Methoden implementieren, die in der Kinderklasse sein muß, die von der abstrakten Klasse ableitet. So definieren Sie grundlegenden Elemente eines Objekts, das durch den Entwickler in einer abgeleiteten Klasse angepasst werden kann, wie er will.

Nicht abstrakte Klassen werden am besten verwendet, um eine Klasse functioanlity zu erweitern, während auch weiterhin zu verwenden, was in der nicht-abstrakten Klasse ist. Alle nicht-private Mitglieder und Methoden können von der abgeleiteten Klasse zugegriffen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top