Was ist das Net-Framework und wozu dient es ?



  • hallo,

    ich möchte mich gerne in die Net-Programmiersprachen einarbeiten bzw. visual c# lernen, deshalb habe ich da einige Fragen an Euch und wäre Euch sehr dankbar wenn Ihr mir diese beantwortet. Diese sind:

    - Wo und Wozu wird die Sprache C# eingesetzt und welche Vorteile bietet sie gegenüber C++ ?
    - Lohnt es sich diese Sprache zu lernen ?
    - Stimmt das, das C# die Sprachen C++ und Visual Basic vereint ?
    - Ist diese Sprache Zukunftssicher oder doch eher C++ ?
    - Was ist der Vorteil bzw. Unterschied von C++.Net zu C++ ?
    - Hat die Sprache C# was mit c++.net und visual basic.net zu tun ?
    - Kann man für GUIs die MFC mit der Net-Umgebung einsetzen oder gibts da eine eigene ?
    - Ist die C# Sprache populär ?

    Vielen Dank

    Micha



  • mike2003 schrieb:

    - Wo und Wozu wird die Sprache C# eingesetzt und welche Vorteile bietet sie gegenüber C++ ?

    Es ist die Hauptsprache für .NET Anwendungen.
    Es ist eine andere Sprache als C++ und sollte lieber mit Java verglichen werden.

    - Lohnt es sich diese Sprache zu lernen ?

    Vielleicht

    - Stimmt das, das C# die Sprachen C++ und Visual Basic vereint ?

    nein

    - Ist diese Sprache Zukunftssicher oder doch eher C++ ?

    c# ist die .NET sprache nummer eins, das wird sich so schnell nicht ändern.

    - Was ist der Vorteil bzw. Unterschied von C++.Net zu C++ ?

    'C++.NET' oder Managed C++ oder C++/CLI ist ein Binding für C++ an das .NET Framework.
    [quote]- Hat die Sprache C# was mit c++.net und visual basic.net zu tun ?[/quote ]
    nein

    - Kann man für GUIs die MFC mit der Net-Umgebung einsetzen oder gibts da eine eigene ?

    es gibt winforms

    - Ist die C# Sprache populär ?

    bei .net anwendungen schon





  • vielen Dank erstmal für Eure schnelle und ausführliche Antworten :-)).

    Also verstehe ich richtig das C++ auf jedenfall weiter bestehen bleibt oder wird irgendwann mal C# C++ ablösen ?

    Verstehe ich auch richtig das .Net-Anwendungen fürs Internet gedacht sind denn die vergleichbare Sprache Java ist ja aine Sprache die für das Internet entwickelt wurde.

    Des weiteren habe ich in bezug auf C# mal den Rückentext von dem Buch C# von Addison-Wesley mal aufgezeigt wo gennant wird das die Vorteile von C++ und Visual B. vereint werden.
    "Die Vorteile von C++ und Visual Basic zu vereinen, ohne die Nachteile zu übernehmen, das beansprucht Microsoft mit seiner Programmiersprache C#". Deshalb verstehe ich nicht warum C++ und VB kombiniert in C# oben verneint werden.

    Was genau wird mit dem Satz:
    'C++.NET' oder Managed C++ oder C++/CLI ist ein Binding für C++ an das .NET Framework.
    gemeint ?

    Ist C# besser als Java oder lohnt es sich besser Java zu lernen ?

    Auch für weitere Informationen bin ich Euch sehr dankbar da ich auch gerne wissen möchte ob ich doch besser bei C++ bleiben soll oder C# lernen soll.

    Gru0

    Micha



  • Viele deiner Fragen werden auf der offiziellen FAQ von MS beantwortet:

    http://msdn.microsoft.com/visualc/productinfo/faq/default.aspx#C++_and_.NET

    C# wird C++ _nicht_ ablösen. Das wurde schon sehr oft von MS betont und es wird sogar in diversen MSDN-Artikeln gesagt, das man NUR mit C++ das meiste aus .NET rausholen kann! 👍

    Vorallem empfehlt MS ja sogar das man weiterhin Unmanaged Code benutzen soll, wenn man z.B. Performance benötigt (bei C# ist es ja immer mananged Code, kannste dir da garnict aussuchen). Hier der Abschnitt aus der oben genannten FAQ:

    What are the performance implications of using managed code?

    It depends. Purely managed code (no specific use of CLR data types) will generally run slower, but this is not always the case. For example, the CLR-targeted Quake II port runs approximately 5 to 15% slower on most platforms, but runs slightly faster on Intel Centrino Pentiums.

    Microsoft recommends that developers selectively retarget portions of their applications to the CLR where it makes sense, and to tune the managed/unmanaged boundaries when and if performance issues arise.



  • Achja, hier noch eine FAQ-Frage:

    If I want to take advantage of .NET, why should I use C++?

    Visual C++ allows you to take full advantage of .NET while at the same time giving you the most efficient and easiest way to interoperate with existing code. It also allows you to leverage your knowledge of C++ to .NET, rather than having to learn a new language.

    What you get is the combination of a language you know and love, a great managed-unmanaged interop story, complete .NET support, and .NET features found ONLY with Visual C++ (such as IJW, OpenMP, and templates).

    Am besten du ziehst dir die ganze FAQ rein, steht ja doch das meiste kurz und präzise drin, was man sonst in vielen MSDN-Artikeln findet.

    Ansonst kann ich nur sagen, es ist egal welche Sprache du lernst. Wichtig ist es eher das Programmieren zu verstehen, logisch denken zu können usw. Wenn du aber C++ kannst, ist C# und Java ein Klacks. Umgekehrt ist es aber schon schwieriger, denke ich.



  • Ich beschreibe mal meine persönlichen Erfahrungen was den Umstieg von C++ zu C# anbelangt:

    Auf den ersten Blick war es nicht so begeisternd. Da gabs irgendwie überall so viele Punkte die mich anfangs einfach verwirrt haben. Es hat mich an Java erinnert und das mochte ich überhaupt nicht :D. Die Sache mit den Namespaces war mir als C++ler zu Beginn auch etwas suspekt und die Klassische Funktions-Ansicht a la VC6 hat mir auch gefehlt. Das suchen der Header-Dateien wurde bereits nach 5 Minuten aufgegeben. Ein Glück dass ich in der Firma einen guten Mentor hatte, denn:

    Mit der Zeit gewöhnt man sich dran. Zum Beispiel der Designer: Es gab wirklich extrem viele Einstellungsmöglichkeiten mit denen man sich effektiv Zeit sparen konnte da man rund ums UI nicht mehr besonders viel machen muss. Die (für mich) nützlichsten Neuerungen waren der Anker und das Dock. Ich konnte festlegen wie sich die Elemente beim vergrössern bzw. verkleinern des Dialoges verhalten sollen (in C++ war das immer ein mühsames Verfahren eine Verwaltungsklasse für sowas zu schreiben). Die Sache mit den vielen Trennpunkten begann ich auch langsam zu verstehen und Namespaces empfinde ich jetzt als sehr praktisch. Was auch von Vorteil war: Ich habe mir in meiner kurzen Zeit als C++ler ziemlich viele recht nützliche Zusatzfunktionen geschrieben die mir den Umgang sehr erleichterten. Und ich dachte ich muss das jetzt für C# ebenfalls machen. Zum Glück falsch gedacht 😃 denn es gibt schon _sehr_ viel vordefiniertes.

    Als neulich ein kleiner Bug in einem meiner C++ Programme entdeckt wurde und ich den beheben musste war der Umstieg sehr komisch. Man kann es sich vorstellen wie wenn man beispielsweise bisher immer mit VisualAssist programmiert hat und man auf einmal darauf verzichten muss.

    Fazit: Insgesamt bin ich sehr froh, C# gelernt zu haben. In viel kürzerer Zeit lässt sich in etwa das selbe machen wie in C++ (vielleicht sogar besser - je nach Applikationsart). Was die Geschwindigkeit betrifft: Es ist gut möglich dass C# aufgrund von .NET langsamer ist, doch ICH für meinen Teil merke keinen Unterschied. Es mag zwar daran liegen dass der Unterschied höchst wahrscheinlich erst bei riesigen Applikationen auftritt aber das Programm das ich in C# geschrieben habe (und am schreiben bin - schon rund 4 Monate) gehört absolut nicht zu den kleineren und wäre zudem in C++ um keinen Deut schneller.

    Soviel von mir. Danke fürs zulesen 😉



  • Die Sache mit den Namespaces war mir als C++ler zu Beginn auch etwas suspekt

    Höh? Bist du von C++ mehr das package-Prinzip aus Java gewohnt? 😕



  • Optimizer schrieb:

    Die Sache mit den Namespaces war mir als C++ler zu Beginn auch etwas suspekt

    Höh? Bist du von C++ mehr das package-Prinzip aus Java gewohnt? 😕

    Ich habe Java nur mal ganz Kurz angeschaut (schon sehr lange her) und weiss nicht genau was du mit Package-Prinzip meinst. Jedenfalls hab ich das mit den Namespaces (vor allem was Zugriff von anderen Klassen anbelangt etc) in den ersten Stunden nicht so gepeilt, warum auch immer.



  • Es ist auf jeden Fall genauso wie in C++ ...
    Außerdem hast du mehr die IDEs und die Bibliotheken verglichen und nicht die Sprachen.



  • Das stimmt schon aber ich habe einfach verglichen was mir persönlich positiv aufgefallen ist. Die Sprache an sich gefällt mir ja auch besser nur wüsste ich jetzt nicht genau wie ich das beschreiben oder in Worte fassen soll.



  • Und was sagst du dazu, das man in C++/CLI genauso schnell seine Anwendungen programmieren kann? Komischerweise kann ich nämlich von C++/CLI aus genau die gleichen Libraries verwenden, wie in C# um schneller zu ergebnissen zu kommen.

    Wenn dir C# von der Sprache her natürlich besser gefällt, dann ist das völlig ok. Was aber die Libs angeht, muß ich dir leider widersprechen. :p Letztendlich macht dein gesamtes Posting fast null Sinn mit dieser Feststellung. 😃 😉



  • Hallo Leute,

    vielen Dank auch für die restlichen Antworten und auch Erfahrungsberichten. Habe mir gestern mal auf die von Optimizer genannte Info auf Wikepedia mal durchgelesen und habe in der History zu C# gesehen das es kaum Software auf dem Markt gibt die in C# geschrieben wurden Zitat

    2004 Obwohl technisch schon einige Jahre alt, steht der Marktanteil an .NET-Programmen immer noch in keinem Verhältnis zur Aufmerksamkeit in Medien und Entwicklergemeinde. Insbesondere auch Microsoft selbst hat keine in der Breite bekannten, komplett mit .NET programmierten Anwendungen veröffentlicht, was sicherlich auch Zeit und Aufwand demonstriert, die technische Umstellungen benötigen.

    Deshalb verstehe ich nicht warum .Net bzw. C# gut sein soll bzw. als Konkurenz zu Java gelten soll.



  • mike2003 schrieb:

    Deshalb verstehe ich nicht warum .Net bzw. C# gut sein soll bzw. als Konkurenz zu Java gelten soll.

    .NET hat teilweise das gleiche Anwendungsgebiet wie Java und C# ist eine Java-ähnliche Sprache, die teilweise sicherlich einige Detailverbesserungen gegenüber Java bietet. Insofern ist es halt eine Konkurrenz zu Java. Da Java im Vergleich zu .NET aber schon länger am Markt etabliert ist, hat es .NET natürlich schwer, sich durchzusetzen. Auch die Verbesserungen sind nicht in jedem Bereich vorhanden. Wenn ich einige Äußerungen von zum Beispiel Optimizer hier richtig in Erinnerung habe, dann ist zum Beispiel das Design der Standardbibliothek nicht wirklich das Wahre. Auch die Generics sollen unter C# gewisse Nachteile gegenüber den Generics in Java bieten, wobei das Gegenteil auch zutrifft. Die einen bieten Unterstützung für primitve Typen, die anderen Unterstützung für Kovarianz usw.! Trotzdem wächst der .NET- und C#-Marktanteil, wenn auch sehr langsam. Es bleibt abzuwarten, inwiefern sich das fortsetzt.



  • mike2003 schrieb:

    vielen Dank auch für die restlichen Antworten und auch Erfahrungsberichten. Habe mir gestern mal auf die von Optimizer genannte Info auf Wikepedia mal durchgelesen und habe in der History zu C# gesehen das es kaum Software auf dem Markt gibt die in C# geschrieben wurden Zitat

    Das es noch so wenige Anwendungen gibt, liegt vor allem auch am Aufwand die Anwendungen und Biblitheken umzustellen. Visual Studio enthält auch gemischten Code aus .NET und native. Du kannst nicht verlangen, dass die mal so eben ihre gesammte IDE umbauen.
    Bevor es mit der Anzahl der .NET Anwendungen "richtig los geht", musst du wohl noch bis Longhorn warten müssen. Microsoft schreibt Avalon und Indigo ja selbst in C# und ist damit durchaus auch willens ihr eigenes "Dog-Food" zu essen.

    Einige .NET Anwendungen gibt es natürlich schon: Arena Wars, MediaPortal, SharpDevelop, Axiom, ATI Control Center, .NET Nuke, RSS Bandit und diverse Entwickler Tools wie NAnt, NUnit, WIX, ...



  • Ja das stimmt schon das auf jedenfall die Umstellung nicht so schnell geht. Wann soll denn longhorn raus kommen ?

    Lohnt es sich eigentlich jetzt noch Java zu lernen oder gleich mit C# anfangen ?

    Java ist ja platformunabhängig ist das C# denn auch ?



  • C# ist normal nicht wirklich Plattformabhängig, da es auf dem .net Framework basiert und das nur unter Windows läuft. Es gibt aber Mono das C# und Teile des .net Frameworks unter Linux anbietet.

    Longhorn soll afaik 2006 kommen.

    Ob java oder C# musst du selber wissen. Jede Sprache hat seine Stärke und seine Berechtigung. C# darfst du nicht als einen Naachfolger von Java sehen. Java und C# sind 2 Paar Schuhe.



  • mike2003 schrieb:

    Java ist ja platformunabhängig ist das C# denn auch ?

    Das sind beides Plattformen.

    FlamourPur schrieb:

    Auch die Generics sollen unter C# gewisse Nachteile gegenüber den Generics in Java bieten, wobei das Gegenteil auch zutrifft.

    Welche Nachteile sollen C# Generics haben?
    Ich habe in einer Ausgabe des dot net magazins gelesen, dass Generics in Java unter der Haube einfach nur gecastet werden.



  • Noodles schrieb:

    mike2003 schrieb:

    Java ist ja platformunabhängig ist das C# denn auch ?

    Das sind beides Plattformen.

    Das ist keine Antwort. "Plattformunabhäng" heißt hier wohl, dass ich mein Programm auf verschieden Computerarchitekturen und Betriebssystemen laufen lassen kann und du sprichst hier von einer Programmierplattform.

    FlamourPur schrieb:

    Welche Nachteile sollen C# Generics haben?

    Och, die haben einige Nachteile. Es sind keine varianten Referenzen möglich, d.h. du hast die selbe Sturheit wie in C++, dass

    List<T> list* = new List< abgeleitet von T >()
    

    nicht geht.

    In Java hast du drei verschiedene Varianzmöglichkeiten, nämlich

    List<? super T>
    List<? extends T>
    List<?>
    

    Und kannst damit sehr viel allgemeinere Algorithmen schreiben. z.B. gibt es

    sort(List<T>, Comparator<? super T>)
    

    Das sind schöne Features, die manchmal einige Code-Duplizierung ersparen. Das mit den versteckten Casts ist implementierungsspezifisch und da ist wohl keiner wirklich begeistert von. Aber sprachlich gibt es zumindest einige Vorteile, neben ein paar Nachteilen gegenüber beispielsweise C#, was dafür Dinge wie new T[] kann.



  • Dann kommen natürlich Dinge hinzu, wie dass Operator-Constraints nicht möglich sind. Klar, in Java gibt es operator overloading gar nicht erst. Aber mir nützen die Operatoren auch nichts, wenn ich sie nicht mit den Typparametern nutzen kann. Letzlich ist das also noch nicht so in sich stimmig.
    Es bringt nichts, nur viele Features zu haben, die dann aber nicht ordentlich zusammenspielen. Wenn ich in C# eine Bruch-Klasse schreibe dann schreibe ich keine Methode add() sondern überlade den op+. Wenn ich den aber in Generics nicht verwenden kann, habe ich einen echten, miesen Nachteil gegenüber der Java-Lösung, so schön mein '+' sonst auch ist.


Anmelden zum Antworten