C # scheint heutzutage populär zu sein. Ich habe gehört, dass es syntaktisch fast dasselbe ist wie Java. Java und C ++ gibt es schon länger. Aus welchen Gründen sollte ich C # anstelle von Java und C ++ wählen?
C # scheint heutzutage populär zu sein. Ich habe gehört, dass es syntaktisch fast dasselbe ist wie Java. Java und C ++ gibt es schon länger. Aus welchen Gründen sollte ich C # anstelle von Java und C ++ wählen?
Antworten:
Die Frage sollte lauten: "Welche Sprache eignet sich besser für die moderne, typische Anwendungsentwicklung?".
Bearbeiten: Ich habe einige der folgenden Kommentare angesprochen. Eine kleine Bemerkung: Bedenken Sie, dass es ein großer Unterschied ist, wenn Sie viele Dinge von Haus aus als Redewendungen haben, als sie jedes Mal selbst zu implementieren oder herunterzuladen und zu verwenden. Fast alles kann in einer dieser Sprachen implementiert werden. Die Frage ist - was die Sprachen Ihnen von Haus aus bieten.
Also aus dem Häuschen (einige Argumente gelten für beide Sprachen) ...
this
Zeigerargument ignorieren ) und so dynamischere und flexiblere Beziehungen zwischen Klassen herstellen. bearbeiten , wenn Sie nicht wissen , das bedeutet , was, dann versuchen Sie ein Element Methode zuweisen Leere zurückkehrt und die Annahme ungültig zu einer void (*ptr)()
Variablen. C # -Delegierte tragen den this
Zeiger mit sich, aber der Benutzer muss sich nicht immer darum kümmern. Sie können void()
jedem anderen void()
Delegaten einfach eine Methode einer beliebigen Klasse zuweisen .using
Anweisung). Java 7 wird dies ebenfalls unterstützen, aber C # hat es schon viel länger.yield
Anweisung.this
Zeiger auf ein Feld zugreifen und die Methode, die es ausführt, an einen generischen Funktionszeiger binden müssen (dh nicht in derselben Klasse), gibt es einfach keine systemeigene Möglichkeit, dies zu tun. In C # erhalten Sie das kostenlos. Sie müssen nicht einmal wissen, wie es funktioniert.this
Zeiger benötigt.using
Aussage ist offensichtlich zusammen mit IDisposable-Wrappern ein großartiges Beispiel für RAII. Siehe diesen Link . Bedenken Sie, dass Sie in C # nicht so viel RAII benötigen wie in C ++, da Sie über den GC verfügen. Für die spezifischen Zeiten, die Sie benötigen, können Sie die using
Anweisung explizit verwenden . Noch eine kleine Erinnerung: Das Freigeben von Speicher ist ein teures Verfahren. GC hat in vielen Fällen einen Leistungsvorteil (insbesondere, wenn Sie über viel Speicher verfügen). Der Speicher wird nicht durchgesickert, und Sie werden nicht viel Zeit für das Aufheben der Zuweisung aufwenden. Darüber hinaus ist die Zuweisung auch schneller, da Sie nicht immer nur ab und zu Speicher zuweisen. Beim Aufruf new
wird einfach ein Last-Object-Pointer inkrementiert.new
und verwalten delete
, was empirisch immer hier und da zu Fehlern führt, oder Sie können (in C ++ 11) Auto-Zeiger nativ verwenden, bedenken Sie jedoch, dass sie viele, viele hinzufügen von Rauschen auf den Code. GC hat also immer noch einen Vorteil.Windows ist das dominierende Betriebssystem auf Clientcomputern. Die besten GUI-Frameworks für Windows-Anwendungen sind Winforms und WPF zusammen mit .NET Framework . Die beste Programmiersprache für .NET Framework und seine APIs ist C # . Java ist hierfür keine Alternative. Und C ++ ist eine ältere Sprache ohne automatische Speicherverwaltung. C # ähnelt C ++, verfügt jedoch über eine automatische Speicherverwaltung und Sie müssen nicht mit Zeigern arbeiten, wodurch Sie produktiver werden. C ++ kann in einigen Fällen immer noch die beste Option sein, jedoch nicht für formularintensive Datenbankanwendungen, die in Unternehmen üblich sind.
Wenn Sie es gewohnt sind, in der Windows-Umgebung und mit C # zu arbeiten, benötigen Sie die geringste Investition, um IIS für die Serverprogrammierung und Windows Server für die grundlegende Verwaltung zu erlernen.
Wenn Sie Software entwickeln, die in Unternehmensnetzwerken bereitgestellt werden soll, wird wahrscheinlich eine Windows-zentrierte Umgebung unter Verwendung eines Windows-Servers mit Active Directory verwendet. In einer solchen Umgebung ist es einfacher, eine in C # und .NET Framework erstellte Lösung zu integrieren und bereitzustellen .
Persönlich bin ich ein Java-Entwickler, kein C # -Entwickler, aber ich arbeite mit dem Web. Ich würde zu C # wechseln, wenn ich Netzwerkanwendungen für Windows-Netzwerke entwickeln würde. Aber ich bevorzuge Java für Linux-basierte Webserver. Ich würde C ++ für eingebettete Systeme wählen, wenn ich nicht viele Abhängigkeiten hätte.
Ja, C # ist eine bessere Sprache mit moderneren Funktionen als C ++ und Java, aber das ist nicht das Wichtigste für die Wahl von C # .
Die Umgebung für Ihre Software ist für die Auswahl von C # am wichtigsten . Wenn Sie in einer Umgebung mit Windows-Clients, Windows-Servern, Active Directory, IIS und möglicherweise SQL Server arbeiten, ist C # die mit Abstand beste Sprache in .NET Framework .
Wenn Sie in einer Unix-Umgebung mit z. B. Webdiensten arbeiten, ist Java meine Wahl. Und wenn Sie mit eingebetteten Systemen arbeiten oder mit Hardwaregeräten integrieren müssen, ist C ++ eine gute Wahl.
C # und Java
C # ist eine sehr gute Sprache, wenn:
C # als Sprache ist in verschiedener Hinsicht besser als Java (bessere Syntax für Eigenschaften, Werttypen, reifizierte Generika usw.). Ich bevorzuge C # als Sprache gegenüber Java, aber im Großen und Ganzen sind sie ziemlich ähnliche Sprachen und für ähnliche Anwendungen geeignet.
Andererseits hat Java auch einige große Vorteile:
Java vs. C # ist also eine ziemlich knappe Angelegenheit und es kommt wirklich darauf an, ob Sie im Microsoft-Camp oder im Open Source / Cross-Platform-Camp sein wollen.
Ich persönlich bevorzuge Java, weil:
C / C ++
C / C ++ ist im Grunde ein ganz anderes Biest. Ich würde nicht für allgemeine Zwecke Anwendungsentwicklung heute aus folgenden Gründen empfehlen:
Es ist jedoch zweifellos eine gute Wahl in einer bestimmten begrenzten Anzahl von Spezialgebieten, insbesondere:
Grundsätzlich ist C / C ++ genau dann eine gute Wahl, wenn Sie sich auf eine der Domänen konzentrieren, für die es besonders gut geeignet ist.
I heard that syntactically they are almost the same.
Syntaktisch? Wer gibt einem fliegenden Affen etwas über Syntax? Syntax ist nur für eines gut: eine schnellere Migration von syntaktisch ähnlichen Sprachen. Das ist es.
C # ist viel besser als Java. Berücksichtigen Sie die generische und funktionale Programmierunterstützung - C # ist Java weit voraus. Ganz zu schweigen von Überladungen von Operatoren und anderen nützlichen Dingen - C # ist wesentlich besser. Es gibt keine Möglichkeit, dass Java möglicherweise als besser als C # angesehen werden könnte.
C ++ und C # sind eher ein Wettbewerb. C ++ hat ein unglaublich ärgerliches archaisches Kompilierungsmodell und eine Reihe älterer Krankheiten aus C, aber seine Vorlagen sind weitaus leistungsfähiger als Generika, und seine Ansätze zur Ressourcenverwaltung sind im Allgemeinen viel flexibler und leistungsfähiger, ebenso using
wie ein vollständiger Fehler, der ausgeführt wird schneller.
Nun C#
hat einige nette eingebaute Funktionen wie LINQ
und Delegierte. Es wird das Beste aus beiden Welten - Java
und C++
. Schauen Sie hier für einen vollständigen Vergleich.
Aber ich mag die Java
Welt besser - viel mehr Open Source Frameworks und sie läuft auf jeder Plattform. Und erzähl mir nichts davon Mono
- es ist keine verlässliche Option.
Laut einigen Quellen (siehe zB http://www.indeed.com/jobtrends ) ist C # immer noch weniger beliebt als Java und genauso beliebt wie C ++.
C # bietet Funktionen, die Java nicht bietet, z. B. direkte Unterstützung bestimmter Programmiersprachen wie Eigenschaften, funktionaler Programmierstil usw. C # hat einen höheren Abstraktionsgrad als C ++, was ein Vorteil ist, wenn die Entwicklungszeit wichtiger ist als die Programmgeschwindigkeit.
Ich persönlich bevorzuge immer noch die Java / C ++ - Welten. Wie Petar Minchev sagte, hat Java mehr Open-Source-Frameworks und -Anwendungen, läuft überall und ist weniger an einen bestimmten Hersteller und ein bestimmtes Betriebssystem gebunden. C ++ hat ähnliche Vorteile, obwohl Code häufig Anpassungen von einer Plattform zur anderen benötigt. Da ich lieber unter Linux entwickle und C # meines Wissens unter Linux nicht vollständig beherrschen kann, habe ich nie wirklich Interesse an C # gezeigt, da meine Programmieranforderungen von C, C ++, Java und Scala abgedeckt werden.
Auf der anderen Seite ist es für viele Entwickler kein Problem, an einen bestimmten Anbieter gebunden zu sein: Microsoft hat eine beherrschende Stellung auf dem Markt für Betriebssysteme und C # bietet viele Beschäftigungsmöglichkeiten. Daher verwenden viele Entwickler von IMO C #, da es nicht nur eine funktionsreiche Sprache ist, sondern auch eine gute Investition darstellt.
Was ist mit "Welches Software Development Framework, das eine Programmiersprache enthält" besser?
Sie haben vergessen, andere Dinge einzubeziehen, wie die "Umgebung", mit der Sie arbeiten werden.
Werden Sie nur für Windows-Betriebssysteme arbeiten, müssen aber nicht auf niedrigem Niveau sein und über viel Arbeitsspeicher und andere Ressourcen verfügen?
Wählen Sie .NET als Framework über Windows und verwenden Sie C #.
Werden Sie nur für Windows arbeiten, müssen aber nicht auf niedrigem Niveau sein, ABER nicht über viele Ressourcen verfügen?
Wählen Sie das Delphi-Framework (und die Programmiersprache Object Pascal Delphi oder Lazarus Object Pascal).
Ist deine App. benötigt, um mehrere Plattformen, wie ein Spiel, in verschiedenen Handys zu unterstützen?
Wählen Sie das Java Framework und die Programmiersprache Java.
Ist es Linux mit KDE als grafische Oberfläche?
Wählen Sie mit C ++ das QT-Framework
Ist es Linux mit Gnome als grafische Oberfläche?
Wählen Sie mit C ++ das GObject / GLib-Framework
Werden Sie mit vielen Operationen auf niedriger Ebene arbeiten, wie z. B. der Entwicklung von Treibern?
Plain C oder C ++ wird für mehrere Betriebssysteme mit Standardbibliotheken als Framework verwendet.
Nur meine 2 Cent.
Wenn Sie eine Suche durchführen, stoßen Sie wahrscheinlich auf Diskussionen über die wichtigsten Programmiersprachen. Hier ist eines der Suchergebnisse - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java scheint immer noch die beliebteste Sprache zu sein.
Java hat versucht, einige der Mängel von C ++ zu beseitigen (und das Leben der Programmierer für nicht-Echtzeit- und nicht-kritische Anwendungen zu vereinfachen). Da C # der Neuling in der Partei ist, wurden einige Mängel der Java-Sprache vermieden. C # hat große Fortschritte gemacht (da Microsoft viel Kontrolle darüber hat), während Fortschritte in Java aufgrund von Konflikten zwischen seinen Stakeholdern für einen beträchtlichen Zeitraum blockiert wurden.
Ein paar Dinge, die noch nicht erwähnt wurden:
C # ist besser als C ++, weil:
Es werden keine Header-Dateien mehr benötigt, was sich in einer großen Einfachheit niederschlägt.
C # ist besser als Java, weil:
Es werden benutzerdefinierte Typen vom Typ Referenz (Klasse) und vom Typ Wert (Struktur) unterstützt. Wenn Sie wissen, was Sie tun, können Sie erhebliche Performance-Vorteile erzielen.
Es unterstützt Delegates, die wie Einzelmethodenschnittstellen sind, und vereinfacht so die Codierung häufig vorkommender Konstrukte, die Einzelmethodenobjekte enthalten, erheblich.
Sie sollten die beste Sprache für Ihre erwartete Umgebung und Ihr Fachwissen auswählen.
Wählen Sie C #, wenn Sie in einer Microsoft-Umgebung arbeiten. Während C # unter ISO / IEC 23270: 2003 standardisiert ist, bleibt die Microsoft-Version die einzige vollständige Implementierung. Einige wichtige Teile der Sprache werden vom Standard nicht abgedeckt und unterliegen daher den Patenten von Microsoft. Niemand anderes wird eine vollständig kompatible Version der Sprache für andere Systeme implementieren. Sie sind also so lange an Microsoft Windows und .NET gebunden, wie Sie die Sprache verwenden. Wenn Sie nach Fähigkeiten suchen, die Sie auf dem Mobilfunkmarkt einsetzen können, sollten Sie sich eine andere Sprache zulegen.
Java funktioniert, hat aber einen erheblichen Overhead, was zum Teil auf Funktionen wie Garbage Collection zurückzuführen ist. Java ist auch nicht durch ISO / IEC standardisiert. Sie können also nicht garantieren, dass Sie beim Wechseln von Plattformen und Versionen von Java die besten Absichten von Sun / Oracle haben. Wenn Sie irgendwann planen, mit Android zu arbeiten, ist dies definitiv der richtige Weg. Die Programmierung von Android ist im Grunde Java, mit ein paar Änderungen.
C ++ ist standardisiert und fast alle Compiler folgen dem internationalen Standard, so dass Sie ein garantiertes Verhalten haben, ABER die Sprache schützt Sie nicht vor sich selbst. Sie müssen die Bereinigung und Überlaufprüfung selbst durchführen. Das ist nicht schwer. C / C ++ - Programmierer machen dies seit vielen Jahren. Apple verwendet Objective C für alles. Wenn Sie also auf Apple abzielen möchten, empfehle ich, dies stattdessen zu versuchen.
Wenn Sie Windows irgendwann einmal hinter sich lassen, empfehlen wir Ihnen, sowohl C / C ++ als auch Java zu lernen - beide sind derzeit auf dem Markt erhältlich.
In Bezug auf C ++ vs C # (da ich nicht über ausreichende Java-Kenntnisse verfüge) fehlt mir hier die Möglichkeit, unter Windows auf Low-Level-Inhalte zuzugreifen. Beispielsweise können Sie in C # (noch) keinen nativen Anzeigetreiber entwickeln, in C ++ jedoch. Dies macht C ++ nicht besser. Ich sehe C ++ versus C # als Assembly versus C.
C # ist meiner Ansicht nach viel effizienter, wenn Sie sich die Zeit ansehen, die für die Implementierung eines Features erforderlich ist. Der Leistungsverlust der .Net-Laufzeit ist für 99% der entwickelten Anwendungen vernachlässigbar. Es kann durchaus von Bedeutung sein, wenn Sie eine enge Schleife haben, aber die meiste Zeit ist eine Anwendung inaktiv und wartet auf jede Art von Eingabe, Signal oder Unterbrechung (Datenträger-E / A, Tastenklick, Netzwerk, Animationsabschluss). .
Die CLR-Bibliothek mit all ihren Funktionen hat einen weiteren großen Vorteil. Als ich C # für Junior-Entwickler trainierte, sagten die meisten, dass sie die logische Namenskonvention von Klassen, Mitgliedern und Namespaces mochten. Es war logisch, im gesamten SDK eine Methode zu finden, an der Visual Basic 5 gravierende Mängel aufwies. Dies hat ihnen bei der Übernahme der Bibliothek enorm geholfen. Nach dem Erlernen der Syntax einer Sprache ist es wichtig, eine neue Bibliothek zu erlernen, um ein gutes Verständnis für ein SDK zu erlangen. Es erspart Ihnen, das Rad neu zu erfinden.