Hey Micke,
cool dass du geantwortet hast! Leider kam ich bei mehrfachen Lesen meines eigenen längeren Pampflets zum Schluß, dass ich wohl lieber doch nicht nach deinem Werdegang frage und das noch mit einer Chance auf eine Option verbinde… Just in dem Moment wo ich meine Frage löschte, hattest du schon geantwortet. Yeah, Shit happens...
Aber insgesamt hätte ich schon Lust drauf mich mit dir zu vernetzen, gerne hier vielleicht später bei den üblichen Verdächtigen.
Zurück zum Thema: Ich dachte bei einer Klasse folgt nach dem Doppelpunkt zuerst die Basisklasse und danach die implementierten Interfaces. Sollte keine Basisklasse angegeben sein, dann wird Object genommen. Spricht man hier tatsächlich von einer Vererbungsliste? Streng genommen ist es tatsächlich eine Auflistung, doch das exakt erste Element in dieser Liste hat in C# eine besondere doppelte Bedeutung. Es kann eine Basisklasse sein oder ein Interface. Genauso ist es möglich keine Auflistung anzugeben, dann schlägt halt der Drache namens Compiler zu und knallt da einfach ein "Object" dahin.
@tollertyp: Interessante Sache, dass ich in meinen vorherigen Post explizit nach dem Unterschied von "interface" und "abstract class" fragte, du dann einfach das Wort "abstract" entferntest, was wiederum insgesamt ne Veränderung der Parameter bedeutet, dementsprechend auch besser zu deiner Antwort passte, aber im Kern nichts mehr mit dem zu tun hatte, worauf ich hinaus wollte!
Was insgesamt vielleicht eine verbesserte Version des Ausgangsposts gewesen wäre, hier nicht nur kurz und knapp eine Frage "Ist das Mehrfachvererbung?" und dann "Meinungen?" zu fragen, sondern schlicht es anders zu formulieren: "Ist es eine Mehrfachvererbung? Und wenn ja, warum?" Ich glaube damit wäre vielleicht etwas schneller der Groschen gefallen, worauf es abzielte... Zumindest wären dann die Propheten keine Propheten mehr, weil sie eben nicht nur eine Weissagung in den Thread pusten, ihre Jünger in Scharen hinterher rennen und die Ungläubigen eher verdutzt aus der Wäsche schauen, weil sie nicht begreifen, worauf Aussagen, wie z.B.
"Definition von Mehrfachvererbung: Mehrere Basisklassen.
Hier ist es eine Basisklasse und ein Interface. Selbst wenn es 20 Interfaces mit konkurrierenden Implementierungen für Schwimmen wäre, wäre es keine Mehrfachvererbung."
tatsächlich basieren.
Im Grunde sind die Interfaces von C# nichts weiter als eine Form von Vertrag, zwischen der Klasse und dem Konsumenten, der aus der Klasse eine Instanz des Objektes erstellt und nutzt. Dieser Vertrag sagt nix weiter, als dass es scheißegal ist, welcher Bauplan (sprich Klasse) da herangezogen wurde, sondern dass eine Instanz des Objektes dir genau die Funktionalitäten liefert, wie es im Vertrag (das Interface) vereinbart ist. Du kannst den gleichen Effekt erzeugen, wenn du eine "abstract class" definierst, haust genauso die Methods, Properties und Events mit dem Schlüsselwort "abstract" in den Body der "abstract class" OHNE eine konkrete Implementierung zu liefern und hast im Kern das Gleiche, wie es ursprünglich seit Beginn der Zeitrechnung in C# als Interface möglich ist. Das Ganze hat auch Unterschiede, z.B. per se gibt es erstmal in C# keine Mehrfachvererbung, zumindest wollten dies die Designer von C# erreichen, wegen Problemen, die man u.a. in C++ hat und bauten eine Limitation von Anfang an ein, die vom C# Compiler dann konkret angemäkelt wird, wenn ein Anfänger 2 Basisklassen in der Auflistung nach dem Doppelpunkt des Klassennamens hinschrieb. Da es aber u.U. sehr sinnvoll sein kann, mehrere Sachen nach dem Doppelpunkt aufzulisten, bietet sich halt eine Liste statt einem einzelnen Namen an dieser Stelle des Quellcodes an. Doch das erste Element hat halt, wie gesagt, diese besondere Doppelrolle und damit kann es leicht fehlinterpretiert werden, dass es eine Vererbungsliste wäre. Aus meiner Sicht ist es nichts weiter als eine Liste, die den Hinweis liefert, was als Grundfunktionalität in deiner Klasse verfügbar ist, nicht mehr nicht weniger. Du kannst jederzeit deine Klasse um zusätzliche Member erweitern, diese sind jedoch dann nicht Bestandteil von Verträgen. OOP braucht nicht zwingend Interface um sich als OOP zu bezeichnen, da auch "abstract class" das Gleiche bewirken können, daher meine Hinweise auf andere Programmiersprachen...
@tollertyp: Ich stelle nicht dein Wissen und deine Erfahrungen in Frage, genauso ist es nicht mein Anliegen dich in irgendeiner Weise anzugreifen. Was mich jedoch an Diskussionen oft stört, wenn Aussagen getroffen werden, ohne das sie begründet werden. Denn es nimmt mir, als Teilnehmer, die Chance hier etwas zu verstehen und somit zu lernen, was eventuell nicht ganz so offensichtlich zu sein scheint. Da aber im Startpost einfach nur nach Meinungen gefragt wurde, ist eigentlich jeder in dieser Runde fein aus dem Schneider. :-D Also von daher alles Tutti-Frutti...
und ich wünsche allen einen schönen Arbeitstag.