C# kommt mir überhaupt nicht wie Java vor. Wie kommt ihr eigentlich darauf?
Es gibt mehrere Gründe:
- Gleiche Architektur: JVM <-> CLI
- Nahezu identische Syntax
- Gleiche Anwendungsbereiche
- beide statisch getypt
Dadurch steht C# in direkter Konkurenz zu Java (die Sprache) und .NET in Konkurenz zu Java (die Plattform). Was sicherlich die Absicht von Microsoft war. Immerhin ist es der zweite Versuch. Erinnert sich noch jemand an J++?
Nur weil es eine Bytecode-Sprache ist?
Nein, viele moderne Sprachen wurden mit Bytcode-Interpretern implementiert, z.B. Python und Ruby. Trotzdem stehen sie nicht in direkter Konkurenz zu Java.
C# ähnelt eher C++ und Obejct Pascal.
In der Tat werden sich modernes C++ und Java auch immer ähnlicher: Templates da, STL dort, Qt hier. Object Pascal kann ich nicht einschätzen; ich kenne nur Pascal und Ada. Kannst Du den Zusammenhang zu C# näher erläutern?
Solche C#-Schlüsselwörter wie virtual gibt es z.B. nur in C++, und in Java überhaupt nicht. In Java ist jede Methode automatisch virtuell. Bei C# und C++ muß ich virtual explizit hinschreiben.
In Anbetracht der Anwendungsgebiete von C# scheint mir das Feature sinnlos. Wieso sollte jemand den Laufzeit-Polymorphismus in C# abschalten wollen? Nur um eine Indirektion beim Funktionsaufruf weniger zu haben? Oder Speicher für die Virtual Function Table zu sparen?
Der kopf hinter C# ist übrigens der Delphi-Erfinder.
Angeblich wechseln daher einige von Object Pascal (Delphi) auf C#.
Warum man C# hasst, weil es von MS kommt, kann ich nicht verstehen. Man kann C# nicht mögen, weil die Sprache einem vielleicht vom Design her nicht gefällt, aber weil es von MS kommt? Echt kindisch.
Man muß das nicht verstehen. Wichtig ist nur, daß diese Abneigung die Verbreitung von C# auf OSS Systemen stark hemmt.
Für die Anwendungsentwicklung gefällt mir C# viel besser als, die unter Unix verbreiteten, C und C++. Aber es wird sich dennoch nicht durchsetzen.
Übrigens, im Gegensatz zu Java ist C# bei der ECMA und bei der ISO normiert. Ich finde, das ist ein sehr großer Vorteil ggü. dem Java, welches immer noch ganz alleine SUN gehört. Nur weil sie die JDK-Implemntierung unter GPL freigegeben haben, heißt das nicht, das die Plattform- und Sprach-Specifikation für jeden frei ist - es ist jetzt nur eine Implementierung frei!
Bei C# und der CLR kann diese aber jeder implementieren und vorallem auch so benennen, wie es die Norm sagt. Java ist dagegen immer noch eine eingetragene Marke! C# dagegen nicht.
Achja, und die CLR ist nicht von MS alleine spezifiziert, da waren und sind immer noch mehrere Firmen wie Intel und HP dabei. Deshalb gibt es auch mehr Implementierungen der CLR als nur .NET und MONO. Die Normierung der CLR macht es möglich.
Die ISO Standardisierung ist in der Praxis nicht so wichtig. Beweis durch Beispiel:
Ada95 war die erste standardisierte (im verbreiteten Sinne) objektorientierte Programmiersprache. Das war 3 Jahre vor C++ (1998). Ada deckt den kompletten Einsatzbereich von C++ ab (Systemprogrammierung, große Anwenungen, Echtzeit, Numerik,...) und noch mehr (sicherheitkritische Anwendungen, Multithreading). Dennoch hat sich Ada nicht durchgesetzt. Warum war das so?
Es gibt nur eine freie Implementierung (GNAT von AdaCore). Deren Lizensierung ist sehr kompliziert.Damit proprietäre Software zu entwickeln gleicht einem Spießrutenlauf (GPL). Alle anderen Compiler sind teuer. Darauf will sich kaum jemand jenseits der Luftfahrt-Branche einlassen.
Bei C# und CLR gibt es nur eine vollständige Implementierung: .NET.
Mono hinkt naturgemäß hinterher und kann Teile aufgrund von Softwarepatenten garnicht implementieren, oder der Anwendungsentwickler kann sie nicht verwenden (außer für SuSE vieleicht). Alle anderen Implementierungen sind weit ab vom Schuß. Das bedeutet, in der Praxis ist ein C# Programm selten plattformunabhängig. Das ist ein entscheidenter Nachteil gegenüber Java.
Object Pascal ist doch ein gutes Beispiel. Lange Zeit war Delphi die einzige Implementierung und damit auf Windows beschränkt. Jetzt gibt es Lazarus, aber es ist zu spät. Andere Sprachen haben das Rennen gemacht (C++, Python, Ruby). Mono wird das selbe Schicksal ereilen und dadurch auch C#.
MfG
Michael Krauß