Hallo Twinsetter
Ich möchte dir kurz meine Gedanken zu den einzelnen Punkten mitteilen, nicht als Korrektur, sondern eher als Zweitmeinung.
- C# ist und bleibt C mit allen seinen Nachteilen, auch wenn man das Mäntelchen von OO drüber gehängt hat und einen Garbagecollector gebaut hat der ordentlich zu funktionieren scheint und dem Programmierer viel Arbeit abnimmt
C# ist nicht mehr wirklich C, ausser von global betrachteten Syntax her. Der grosse Vorteil von .NET allgemein (und auch Java) ist der schier unerschöpfliche Fundus an bereits implementierten (und getesteten
) Komponenten und Utilities.
- C# verleitet immer noch zum wilden und unstruktiertem Programmieren. Da werden plötzlich Variablen in Funktionsaufrufen declariert die sonst nirgends vorkommen , aber man braucht sie weil sonst Schrott raus kommt
Ich würde eher sagen: Es ermöglicht es, aber es verleitet nicht dazu. Und den zweiten Teil verstehe ich nicht ganz, bzw kann ich so nicht bestätigen.
- das case und while Konstrukt ist nach wie vor crottig. Was soll das bekloppte break in der case Schleife. case heißt eigentlich im Falle von und das interpretiere ich so, wenn eine Bedingung erfüllt ist dann wird diese und keine weitere ausgeführt (obwohl es Aufgaben gibt, wo die Interpretation der case Schleife von C schon Sinn macht - die sind aber - zumindest bei mir- eher selten)
Dem kann ich für
case nur beipflichten. Vor allem da ja der Grundgedanke aus C, dass man durch verschiedene
case-Labels implizit durchspringen kann in C# gar nicht möglich ist, du musst ein anderes Label explizit aufrufen, daher hat das break da eigentlich gar keine Daseinsberechtigung. Man hat dies vermutlich eingeführt weil man die Leute von C++ nach C# bringen will aber verhindern will, dass sie einen Kulturschock erleiden
- Mengen kennt C# immer noch nicht. Warum eigentlich ist nämlich eine tolle Sache
Der Support für Mengen ist in der Tat noch nicht wirklich berauschend, es gibt jedoch HashSet.
- Ich habe bei meinem Programm eine Pluginschnittstelle vorgesehen. Die Plugins (DLL's) können in einer beliebigen Programmiersprache geschrieben sein. Mit C# ist das nur bedingt möglich, da DLL's die in einer anderen Sprache wurden in der i.d.R. als unmanaged Code eingebunden werden müssen und bei unmanaged kann ich derzeit den DLL-Namen nicht ändern. Bei Plugins ein Unding. D.h. ich müßte eine Wrapper DLL in C# (managed Code) dazwischen schalten, die dann die eigentliche DLL (unmanaged) aufruft.
Das stimmt so nicht. Du kannst sowohl unverwalteten als auch verwalteten Code einbinden. Eine andere in .NET geschriebene DLL kannst du mit einem Einzeiler laden und dessen Typen verwenden als wären sie in deiner eigenen Applikation drin, hier ist .NET wirklich extrem angenehm. Plugins mit .NET zu machen geht wie ein warmes Messer durch Butter. Auch für unverwalteten Code bieten sich sehr einfache Möglichkeiten an. Eine davon ist PInvoke, die andere ist COM.
- eine vernünftige Gridkomponente gibt es tatsächlich nicht (Aussage des Instruktors) Hier muß man sich aus der Listenkomponente selbst was zusammenbauen.
Es kommt draufan, was "vernünftig" ist, es gibt das DataGridView welches Basisfunktionalitäten bietet, für MsSQL orientierte Applikationen gibt es schon etwas fortgeschrittenere Sachen. Zudem gibt es fast unendlich viele tolle Controls im Netz (auch häufig gleich in Visual Studio über NuGet mit einem Klick hinzufügbar), teilweise auch kostenlos.
- C# Programme sind deutlich langsamer als Programme in C/C++ oder Pascal. Kann ja auch nicht anders sein, da sie ja erst zur Laufzeit kompiliert werden. Vorteil ist natürlich das es hierdurch detailierte Fehlermeldungen gibt (mit Angabe der Zeilennummer)
Dies musst du anders formulieren: Die schnellste Möglichkeit in .NET ist langsamer als die schnellste Möglichkeit in C++. ABER: Die schnellste Möglichkeit in .NET zu implementieren ist kein grosser Aufwand, die schnellste Möglichkeit in C++ zu implementieren ist in der Regel langwierig, zäh und geprägt von viel Frustration was im Endeffekt dazu führt, dass oftmals die .NET Programme schneller sind als vergleichbare C++-Programme, weil man einfach nicht die Zeit und Resourcen hat in C++ das Maximum rauszuholen in .NET jedoch schon.
Persönlich würde ich dann doch eher zu Java neigen.
Zu Java rate ich eigentlich nur noch, wenn du wirklich viel auf verschiedenen Plattformen realisieren willst (mobile/desktop/...). In den von dir genannten Punkten unterliegt .NET Java eigentlich nur bei den Mengen im Rest hat .NET die Nase deutlich vorne. Das wird sich auch in Zukunft noch viel weiter auseinander leben, in der Zeit in der Java kein einziges Sprachupdate erlebt hat gab es bei C# glaub ca 4 Major Releases mit neuen Features und Funktionen.
Und zu guter Letzt:
Parallelität war nie angenehmer als in C#