Hallo, mein Name ist Strasser und ich gehöre zur Klasse Person.
Mit solchen oder ähnlichen Beispielen kann man die Schulungsteilnehmer, die sich für OOP interessieren hinhalten. Schlimmer wird es mit der Mehrfachvererbung. Hat man diese nach der Schulung einmal verstanden (indem man es geschafft hat nicht einzuschlafen, auszusteigen oder nebenbei auf diversen Seiten herumgesurt hat) und läßt die Teilnehmer dann in die freie Programmierwelt los, versuchen diese natürlich den geschriebenen Code mit Hilfe der Mehrfachvererbung und unartigen Worten zu beleidigen.
Die Programmiersprache C# verhindert, seinen Code mit der Mehrfachvererbung zu beleidigen und ihn in den Abgrund zu stoßen.
C# LÄSST KEINE MEHRFACHVERERBUNG ZU !!!
Statt dessen hält sich C# an virtuelle Objektsysteme, Kapselung, Polymorphie und Vererbung. Man soll sich jetzt aber nicht einbilden, dass die Welt nun einfacher geworden ist und C# ihnen dabei behilflich ist, dass ihr Magengeschwür kleiner wird.
Den Papierkorb auf Ihrem Desktop kennen Sie ja auch, nun da kommt das ganze klassische Konzept der globalen Funtionen, der Variablen und Konstanten auch hin. C# löst diese Probleme mit Klassen, in denen sich statische Datenelemente befinden - siehe dazu die zahlreichen sehr wichtigen Bücher - Kapitel Namenskonflikte. C# erlaubt sich sogar (was für eine Frechheit) den Code somit übersichtlicher zu gestalten.
Wenn wir schon einmal bei den Namenskonflikten sind, meine lieben C++ Programmierer. Erinnern Sie sich noch an die Definition von Datenelementen in den Klassen, die Sie dann später einmal umdefiniert haben - na Mahlzeit und guten Appetit.
Hallo, noch da?
C#-Methoden sind von Grund aus nicht virtuell. Virtuelle Funktionen in C# muss man mit virtual kennzeichen - explizit. Hier kann man dann nicht mit voller Überzeugung zum Projektleiter sagen: Ups, tut mir Leid, die hab ich wohl aus Versehen überschrieben, entschuldige.
vtable - ahh, die Versionierung. Herr C# (Projektleiter), ich weiss auch nicht, aber die vtable wächst bei jeder Version an. C# lacht darüber nur. Die Datenelemente in C# lassen sich als privat, öffentlich, geschützt oder intern definieren. Eigentlich erhalten Sie von C# die totale Kontrolle (so mancher Staat würde dies begrüßen) über die Kapselung der Datenelemente - C# Ihr Freund und Helfer. Die Überladung funktioiert auch in C# in einer Variante die sehr übersichtlich ist und die Syntax einfach. Für die ehemaligen Funktionszeigerfet... hat das Komponentenmodell von .net durch die Implementierung von delegates realisiert.
Wer aber die Mehrfachvererbung liebt und nach meiner Meinung (wenn diese nach den Artikel noch gehört werden will) die einzig sinnvolle, kann das in den Schnittstellen machen.
Die jenigen, die noch nichts zu lachen gehabt haben - hier ein alltägliches und umfangreiches Beispiel
interface ICSharp { void F(); void F(int x); void F(ref int x); void F(out int x); void F(int x, int y); int F(string s); int F(int x); } |