Java <-> C# Vergleich



  • Ich hab bisher noch nichts mit C# gemacht, aber mich würde mal interessieren wie C# im Vergleich mit Java abschneidet. Gibts dort auch eine gute standard Bibliothek im Sprachumfang die auch durchgängig verwendet wird. Benutzt man dort z.B. überall die gleichen Klassen/Iterfaces für Strings, Listen usw. oder oder ist es mehr wie bei C++, dass es überall unterschiedliche Strings gibt?



  • LordI schrieb:

    Ich hab bisher noch nichts mit C# gemacht, aber mich würde mal interessieren wie C# im Vergleich mit Java abschneidet. Gibts dort auch eine gute standard Bibliothek im Sprachumfang die auch durchgängig verwendet wird. Benutzt man dort z.B. überall die gleichen Klassen/Iterfaces für Strings, Listen usw. oder oder ist es mehr wie bei C++, dass es überall unterschiedliche Strings gibt?

    C# und standard? loooooooooooooooooool
    Um C# progs auf Windows zum laufen zu bringen, braucht man erstmal eine Laufzeitumgebeung die 6 Gigabyte groß ist. Dann läuft grad mal ein C#-Hello-World Programm in Zeitlupe!



  • LordI schrieb:

    Ich hab bisher noch nichts mit C# gemacht, aber mich würde mal interessieren wie C# im Vergleich mit Java abschneidet. Gibts dort auch eine gute standard Bibliothek im Sprachumfang die auch durchgängig verwendet wird. Benutzt man dort z.B. überall die gleichen Klassen/Iterfaces für Strings, Listen usw. oder oder ist es mehr wie bei C++, dass es überall unterschiedliche Strings gibt?

    Ich hoffe mal dass du kein Troll bist. Aber ich möchte dir mal eben antworte.

    Für C# brauchst du das .Net Framework 1.0 oder eben 2.0. Das ist etwa 20 mb groß.
    Das kannst du dir so vorstellen: In dem Framework gibt es vorgefertigte Klassen, die du dann für deine Programme verwenden kannst.



  • Das es das .NET Framework gibt weiß ich auch. Mir geht es darum, ob die mitgelieferten Klassen auch durchgängig verwendet werden. Für C++ gibt es zwar auch die STL, aber die wird nun wirklich nicht durchgängig verwendet. Wenn man z.B. in Java ein fremdes Framework verwendet das eine Liste zurückgibt, dann wird so gut wie immer das standard List Interface verwendet. Wenn man dagegen in C++ ein Framework verwendet, dann wird fast nie der std::vector verwendet. Wie sieht das bei C# aus?



  • LordI schrieb:

    Das es das .NET Framework gibt weiß ich auch. Mir geht es darum, ob die mitgelieferten Klassen auch durchgängig verwendet werden. Für C++ gibt es zwar auch die STL, aber die wird nun wirklich nicht durchgängig verwendet. Wenn man z.B. in Java ein fremdes Framework verwendet das eine Liste zurückgibt, dann wird so gut wie immer das standard List Interface verwendet. Wenn man dagegen in C++ ein Framework verwendet, dann wird fast nie der std::vector verwendet. Wie sieht das bei C# aus?

    Ich weiss zwar nicht ob ich deine Frage nun richtig verstanden habe, aber evt habe ich ja Glück 🙂

    Mit C# kannst du nur mit dem .Net Framework arbeiten



  • bei .NET kannste z.b. auch char* als strings nehmen wenn es sein muss. also nimm besser java. .NET ist irgendwie nur eine aufgebohrte java-kopie...



  • Lyrix schrieb:

    Ich weiss zwar nicht ob ich deine Frage nun richtig verstanden habe, aber evt habe ich ja Glück 🙂

    Ne glaub nicht, aber net hats eher verstanden.
    In C++ gibt es den std::string, wenn man mit MFC arbeitet kommt noch der CString dazu, irgendwelche anderen Sachen verwenden nur char* als String. In Java gibt es eine String Klasse und die wird von (fast) allen verwendet.

    Lyrix schrieb:

    Mit C# kannst du nur mit dem .Net Framework arbeiten

    Es gibt doch sicher auch irgendwelche Bibliotheken von Drittanbietern (vlt. OpenGL) Verwenden die z.B. alle eine einzige Klasse für Strings aus dem .NET Framework oder gibts da schon wieder ein durcheinander?



  • Es gibt keine relevanten Unterschiede zwischen Java und C# - sie sind sich beide total ähnlich.

    Der Unterschied ist auf einer anderen Ebene zu suchen.

    zB eben dass Java offen ist und daher cross plattformfähig, während .NET eben super einbindung in Windows hat. Was aber die Leistung dieser beiden Plattformen betrifft, nehmen sie sich nicht viel.



  • In C# gibt es auch eine string-klasse die von ALLEN C#-Programmierer verwendet wird.



  • Überlegt doch erstmal, warum im C++ Bereich jedes Framework seine eigene String-Klasse, eigene Container hat? Und dann kann man sich auch denken, warum bei Java und C# jeder die vorhandenen Klassen benutzt bzw. warum sich die Frage dieses Thread erst garnicht stellt.



  • Im Endeffekt ist es egal welche Sprache du lernst. Wie bereits öffter erwähnt sind sich beide Sprachen sehr ähnlich. Java lehnt an die Syntax von C++ an und C# basiert auf C/C++. Die Konzepte der Programmierung (angefangen von der strukturierten bis hin zur objektorientierten) sind sprachenunabhängig. [1] Wenn man einmal diese Konzepte beherrscht ist es nicht schwer die Syntax einer anderen Sprache zu erlernen. Ich habe mir zum Beispiel eine Referenz zu Java bestellt. Da ich C++ beherrsche brauche ich nicht zu lesen was eine Variable ist sondern habe nur die Syntax im Blickfeld.

    --
    [1] Einige Sprache unterstützen gewisse Features nicht. Damit meine ich das es in einer Sprache schwer ist ein gewisses Konzept zu verfolgen. So unterstützt die Programmiersprache Java keine strukturierte Programmierung - es wird nur mit Objekten gearbeitet. Dies ist jedoch konkret auf Java bezogen kein Manko... ich denke jeder weiß was ich sagen will ^^



  • Java und C# geben sich nicht viel. Das eine ist halt das Orginal, das andere ne aufgebohrte standardisierte Kopie. Bei Java finde ich aber dass es viel mehr viel coolere Entwicklungstools gibt - da hat .NET noch einiges aufzuholen.



  • Java und C# geben sich nicht viel. Das eine ist halt das Orginal, das andere ne aufgebohrte standardisierte Kopie. Bei Java finde ich aber dass es viel mehr viel coolere Entwicklungstools gibt - da hat .NET noch einiges aufzuholen.

    Ja da muss ich dir wohl Recht geben. Wobei GNU Emacs ist immer noch meine LieblingsIDE (und ja Emacs ist eine IDE ^^ - Debugger, Compiler.. alles lässt sich ohne weiteres aus dem Emacs aufrufen :)).

    Aber was ich eigentlich sagen wollte ist das sich alle Programmiersprachen in den grundlegenden Konzepte _sehr stark_ ähneln. Delphi und C++ unterstützen z.B. beide das Konzept der Objektorientierung (als Beispiel: Beide Sprachen verwenden Klassen). Die Sprachen unterscheiden sich größtenteils nur durch die Syntax.



  • Headhunter schrieb:

    Java und C# geben sich nicht viel. Das eine ist halt das Orginal, das andere ne aufgebohrte standardisierte Kopie.

    Ich finde, dass C# inzwischen schon einen sehr eigenen Stil entwickelt hat, auch wenn die Wurzeln natürlich erkennbar sind. Selbst wenn man den unsafe-Kram weglässt, unterscheiden sich die Sprachen immer noch massiv. C# hat einige Features mehr, das Interface-implementieren-System funktioniert anders, es gibt value classes und Sprachmittel für properties, delegates und events, die ich sehr gerne und sehr ausgiebig nutze. Auf diese Features verzichte ich schon lange nicht mehr gerne.

    Bei C# 3.0 kommt mit den lambda expressions noch eine gute Portion funktionale Programmierung hinzu.



  • Hi,

    klar, C# kann mehr und ist cooler. Interessant ist aber, dass viele der Features die du erwähnt hast, einfach per leichte Bytecodeänderungen machen kann. Also für LINQ oder Properties braucht man keinen fundamental anderen Aufbau, sowas sollte bei Java auch möglich sein, wird aber beschnitten. Mal schauen was Groovy bringt 🙂



  • Was mich persönlich auch begeistert hat bei der Programmierung in Java war der massive Einfluss von OpenSource Software. Man denke dabei nur an Ant, Maven, Spring, Struts, Hibernate, etc.. Allesamt Innovationen im Java Bereich, die erst nach und nach auch in der .NET Welt durch Portierungen verfügbar werden.



  • Wobei properties, delegates und events eigentlich nur nettes Beiwerk sind, genauso wie Operator-Überladung.
    properties kann man durch getter/setter-Methoden ersetzen.
    delegates und events durch Interfaces/abstrakte Klassen und halt Container-Klasse die diese verwalten.
    So ein entscheidendes Kriterium ist es nicht, wenn man eine Sprache wählen kann/will.

    C# kann mehr und ist cooler

    Das ist eine sehr komische Aussage. Ein Ziel von Java war es doch möglichest einfach zu sein. Java hat eben wenig Redundanz.
    Ein Beispiel:
    Struct/Class, wozu das unterscheiden? In Java hat man es gelassen und lebt auch glücklich damit.
    properties sind halt nur getter/setter-Methoden, also hat man die in Java auch ausgelassen. Dafür gibt es in Eclipse die Option die getter/setter automatisch zu generieren.
    Virtual/nicht virtual. Für den Anwender der Klasse ist es egal, also hat man in Java einfach alle Methoden per default virtual gemacht. Der Compiler kann dann ja entscheiden ob der overhead nötig ist.

    Ich frag mich grad nur eins, wieso wurde erst mit C#/net. 2.0 Generics eingeführt? Wieso nicht gleich in 1.0. Nun muss man beides Implementieren (Generic/nicht Generic), das ist mehr als lächerlich.



  • Die Sprachmittel machen es halt leichter. Bei properties muss ich keine Methoden suchen die get/set heißen und als Properties verstehen. Bei events muss ich halt dann nicht mehr schreiben

    addKeyEventListener( new KeyEventListener() {
    ....
    } )

    sondern schreibe form.KeyDown += myHandler.

    Ist halt schöner und deshalb möchte ich nicht darauf verzichten. Auch structs haben ihren Sinn. Wenn etwas logisch einen Wert repräsentiert (zum Beispiel ein Datum), dann ist es auch toll, es als Wert zu behandeln. Manchmal ist dafür ein struct schöner, manchmal eine immutable class wie bei String. In Java hat man nur letztere Möglichkeit.

    Die Generics in C# sind auch nicht schlecht, nur das API aus dem .Net Framework 1.x. Ich habe auch immer kritisiert, dass die Generics nicht von Anfang an dabei waren. Dafür haben sie Runtime-Support, ich kann nach T casten, kann Ts instanzieren, kann den Typ getten und habe eine sehr ordentliche Constraint-Syntax. Wenn man das alles von Anfang an eingebaut hätte, wäre das erste .Net erst 2 Jahre später erschienen. Hätte mich persönlich natürlich nicht gestört, aber so eine Plattform von Microsoft war mehr als überfällig.

    Nötig ist natürlich keines der erwähnten Features, aber diese Features haben gerade eben die Aufgabe, sehr häufig wiederkehrende Aufgaben zu vereinfachen. Was man nicht braucht, ist Komma-Operator überladen wie in C++. Aber ein Dictionary, von dem logisch gesehen ein Array nur als ein Spezialfall mit int als Indizes zu verstehen ist, sollte man schon mit [] indizieren können. Und auch hier hat man wieder eine sehr saubere Unterscheidung zwischen getter-[] und setter-[], nicht so wie in C++ wo man diese beiden Fällle gar nicht auseinanderhalten kann. Insofern würde ich sagen, dass C# sehr viele gute Ideen schon auch mitgebracht hat.



  • Cool, jetzt geben sich's die Java und C#-Anhänger zur Abwechslung mal richtig 😃

    Und auch hier hat man wieder eine sehr saubere Unterscheidung zwischen getter-[] und setter-[], nicht so wie in C++ wo man diese beiden Fällle gar nicht auseinanderhalten kann.

    Scott Meyers stellt in MEC++ eine Technik vor, die eine Unterscheidung zw. Lese - und Schreibzugriff ermöglicht.

    MfG

    GPC



  • java fan schrieb:

    Was mich persönlich auch begeistert hat bei der Programmierung in Java war der massive Einfluss von OpenSource Software. Man denke dabei nur an Ant, Maven, Spring, Struts, Hibernate, etc.. Allesamt Innovationen im Java Bereich, die erst nach und nach auch in der .NET Welt durch Portierungen verfügbar werden.

    Irgendwie redest du von einer Einrichtung die eben auf Java ausgerichtet ist. Aber du magst schon recht haben, dass es für Java mehr OpenSource-Libraries gibt.

    Bei Java finde ich aber dass es viel mehr viel coolere Entwicklungstools gibt - da hat .NET noch einiges aufzuholen.

    Coolere Entwicklungstools? Welche? Eclipse das bis jetzt noch keinen ordentlichen GUI-Designer hat (VE ist ja wohl ein Witz)? JBuilder? IBM-RAD für 5000 Flocken? JDeveloper der außer langsam und oraclebasiert auch noch buggy ist?

    Cool ist es natürlich schon, das Eclipse. Aber Visual Studio ist nunmal Visual Studio. Da kommt imho nichtmal IBM-RAD alias Ich-Habe-Alles-Integriert ran 🙂

    MfG SideWinder



  • Die Sprachen unterscheiden sich dort wo ihre Frameworks eingesetzt werden. Zb Java eher im Serverbereich/Internetbereich. C# eher im Clientbereich.

    Achja: Wirklich 'cool' ist nur wer beide Sprachen beherrscht 😉

    MfG SideWinder


Anmelden zum Antworten