C# Mehrere Form-Klassen in einer Ableitungshierarchie erstellen - Unmöglich in C# ?

Jack159

Lieutenant
Registriert
Dez. 2011
Beiträge
766
Hallo,

Ich komme ursprünglich von Java.
Was ich bei C# in Verbindung mit den WindowsForms nicht ganz verstehe ist folgendes:

Jede Form, welche man mit VS erstellt, erbt ja (automatisch) von der Form-Klasse.
Was ist aber nun, wenn ich in einem C#-Projekt bei der View folgende Ableitungshierarchie der View-Klassen haben will:
- Ich habe 2 Form-Klassen: Form1 und Form2
- Form2 erbt von Form1

Das wäre doch so garnicht möglich, da ja automatisch bereits jede erstelle Form von von der Form-Klasse erbt und bekanntlich eine Klasse nur von maximal 1 Klasse erben kann (es gibt also keine Mehrfachvererbung).

In Java wäre obiges Beispiel problemlos möglich, da dort eben meine "GUI-Klassen" nicht bereits von beginn auf von irgendeiner anderen Klasse erben (müssen). (Dort schreibe ich ja sowieso mehr selber und habe da etwas mehr Kontrolle diesbezüglich).

Übersehe ich da was oder ist das so tasächlich nicht möglich in C#?
Falls es wirklich so nicht möglich sein sollte, wie realisiere ich dann obiges Beispiel am besten? Über Interfaces? Gibts alternativen?
 
Was du willst ist keine Mehrfachvererbung. Mehrfachvererbung würde bedeuten, dass Form2 gleichzeitig von Form1 und irgendeiner anderen Klasse erbt von der Form1 nicht erbt. Das geht weder in C# noch in Java (aber z. B. in C++).

Du willst lediglich von einer Klasse erben, die ebenfalls eine Basisklasse hat. Das geht in C# und in Java:
Code:
class Form1 : Form { ... }

class Form2 : Form1 { ... } // Das ist erlaubt.

class Foo { ... }

class Form3 : Form1, Foo { ... } // Das ist nicht erlaubt.
 
Zuletzt bearbeitet: (Code-Beispiel ergänzt.)
Wie Vorposter geschrieben hat:
Form1 erbt von Forms und Form2 erbt von Form1 - da gibt es kein Problem. Ich glaube du hast nur nicht so richtig das Konzept von Vererbung verinnerlicht. In Java erbt ja auch alles streng genommen von System.Object
 
Stimmt, so kann man es natürlich machen:

Code:
class Form1 : Form { ... }
 
class Form2 : Form1 { ... }

Form2 erbt von Form1 und Form1 wiedderum von Form. Also besitzt Form2 ebenfalls die Form-Sachen, die Form1 durch das erben von Form erhält.

Danke ;)
 
Jack159 schrieb:
In Java wäre obiges Beispiel problemlos möglich, da dort eben meine "GUI-Klassen" nicht bereits von beginn auf von irgendeiner anderen Klasse erben (müssen). (Dort schreibe ich ja sowieso mehr selber und habe da etwas mehr Kontrolle diesbezüglich).

Technisch gesehen erben alle Klassen von Object. Was ich nicht ganz versteh: du nimmst also eine Klasse, die nicht von JFrame oder ähnlichem erbt und bastelst mit ihr eine GUI?

Außerdem sind Vererbungshierarchien sowohl in C# als auch in Java möglich. Das Beispiel mit der Vererbung, das du nanntest wird in beiden Sprachen funktionieren, da C# und Java diesbezüglich sehr ähnlich gestrikt sind.
 
Statt Vererbung zu verschachteln sollte man entsprechend auch eher zu einem Interface oder abstrakten Klassen bzw. Funktionen greifen um eine gemeinsame API zu ermöglichen.
 
Zurück
Oben