Abstrakte Klasse
-
Hallo,
Brush ist abstrakt. Wieso geht dann das hier.
Brush mybrush = Brushes.Red;
Sorry die Frage ist blöd aber ich kanns mir grad nicht erklären.
-
-
Was soll es da zu erklären geben?
-
Du kannst keine Instanz von Brush erstellen, da die Klasse abstrakt ist.
Aber es gibt von Brush abgeleitete Klassen, z.B. SolidBrush (http://msdn.microsoft.com/en-us/library/system.drawing.solidbrush.aspx).
Hiervon kannst Du Instanzen erstellen (siehe Konstruktor im Link).
Diese Instanzen kannst Du als Brush ansprechen, weil ihre Klasse von Brush abgeleitet ist.Bei einem solchen Zugriff stehen keine SolidBrush-spezifischen Member zur Verfügung, sondern nur das, was Brush bereitstellt.
-
Ein Objekt einer abstrakten Klasse ist ja eigentlich nicht möglich. Deswegen verwirrt mich diese Zuweisung !!
Brush mybrush = Brushes.Red;
-
blurry333 schrieb:
Ein Objekt einer abstrakten Klasse ist ja eigentlich nicht möglich.
Nicht eigentlich. Es ist nicht möglich.
Deswegen verwirrt mich diese Zuweisung !!
Warum? Wo kommt denn da deiner Meinung nach ein Objekt einer abstrakten Klasse vor?
-
Brushes.Red gibt eine Instanz von einem SolidBrush mit Farbe Rot zurück. Daher funktioniert die Zuweisung.
Man kann den Konstruktor einer abstrakten Klasse nicht aufrufen, man kann jedoch über eine geerbte Klasse eine Instanz erstellen. - Man muss sich nur im klaren sein, das es weiterhin die geerbte Klasse ist.
Stell dir einfach vor die abstrakte Klasse wäre Lebewesen. - Dann kann Lebewesen eben Baum, Sonnenblume, Affe oder Mensch sein.
-
Kann es sein, dass du nicht weißt, dass es in C# im Gegensatz zu C++ keine Stackobjekte gibt? "Brush mybrush" ist kein "Objekt".
-
Mechanics schrieb:
Kann es sein, dass du nicht weißt, dass es in C# im Gegensatz zu C++ keine Stackobjekte gibt?
Aber es gibt Stack-Objekte in C# (struct).
-
Mechanics schrieb:
Kann es sein, dass du nicht weißt, dass es in C# im Gegensatz zu C++ keine Stackobjekte gibt? "Brush mybrush" ist kein "Objekt".
Verwirr den armen Kerl noch mehr. Kann es sein, dass du nicht weißt, dass er schon seit Monaten verwirrt ist über die Verwendung von Programmiersprachen?
-
inflames2k schrieb:
Brushes.Red gibt eine Instanz von einem SolidBrush mit Farbe Rot zurück. Daher funktioniert die Zuweisung.
In C++ würde auch das nicht gehen. Abstrakten Klasse kann man auch nichts zuweisen.
-
blurry333 schrieb:
In C++ würde auch das nicht gehen. Abstrakten Klasse kann man auch nichts zuweisen.
Dasselbe Beispiel sieht in C++ im Prinzip so aus:
Brush* mybrush = Brushes::Red;
und das geht sehr wohl, auch wenn Brush abstrakt ist.
-
jetzt ist es klarer