Umstieg von C ++ auf C#

  • C#

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Umstieg von C ++ auf C#

    Moin,

    Wollte mal nachfragen, ob der Umstieg von C++ auf C# schwierig ist oder ob man da schnell rein findet?

    *Topic verschoben*
    Mit Freundlichen Grüßen
    AtomiX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Von C++ auf C# nimmst du die C-Syntax und einen Großteil der Grundkonzepte (OOP etc.) mit, das meiste ist am Ende aber natürlich anders. Alles, was unabhängig von Libraries oder Frameworks ist (die ganzen verschiedenen Libraries des .NET-FWs zähle ich jetzt mal dazu), sollte man ohne wirkliche Umgewöhnung hinkriegen - die Grundsyntax ist ja gleich und die ganzen wichtigen Grundtypen und Sprachkonstrukte sind erstmal annähernd gleich. Darüber hinaus muss man halt das .NET Framework kennen lernen und bei ein paar Aspekten umlernen (bspw. Pointer in C++, welche man in C# fast nie braucht), was durchaus länger dauert.
    @nafets Jou.
    @AtomiX Algorithmischen Code kannst Du praktisch 1 : 1 übertragen, das ist problemlos.
    Das Ansprechen der GUI-Elemente ist hingegen anders, deren Philosophie sogar völlig anders.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah ok.
    Danke für eure Antworten.

    D.h. wie es wahrscheinlich zu erwarten war sind ein paar kleinere Sachen anders, so dass die Umgewöhnung nicht all so schwer ist.

    Muss ich da noch auf irgendwelche Sachen achten, weil die komplett anders sind?
    Mit Freundlichen Grüßen
    AtomiX
    Ich würde nicht umsteigen, C# nervt manchmal ziemlich. Polymorphie ist ganz anders, es gibt keine Templates, Concurrency finde ich immer noch gewöhnungsbedürftig. Andererseits ist ein UI wesentlich einfacher. Besonders in WPF. Besser ist's einfach C# zu lernen und dann die Sprache dem zu lösenden Problem nach zu wählen.
    Ähnlich ist nur die Syntax das wars. Nur ähnlich. Ein gutes Beispiel ist der switch, C# implementiert den komisch.
    Warum nicht beides machen? Beide Sprachen eignen sich für gewisse Anwendungsfälle besser als die jeweils andere.

    Gonger96 schrieb:

    Ein gutes Beispiel ist der switch
    Nur weil etwas anders ist, ist es nicht schlecht. In C# ist es anders implementiert, vermeidet dafür aber Programmierfehler und hat Pattern-Matching. Sprachen zu haten, bloß weil Feature X nicht genauso umgesetzt wurde wie in Sprache Y ist ziemlich lame.
    Von meinem iPhone gesendet
    C# ist die Programmiersprache, WPF/Forms die UI-Technologie. Wähle die, die du brauchst. Eine von beiden wirst du lernen müssen. Die Frage ist was du vorhast zu programmieren.
    @nikeee13
    Ich hate hier gar eine Sprache, dann würde ich's ja nicht benutzen ^^ Ich sage nur, dass jede Sprache ihre Vorzüge hat und es nur Sinn macht eine Neue zu lernen, wenn man diese Vorzüge für kommende oder aktuelle Projekte nutzen will. Pattern-Matching ist ein anderes Beispiel. Gibt's nicht in C++ (kenn ich zumindest nicht). Dafür kann man z.B. Operatoren deutlich freier überladen. Gibt viele Sachen die anders sind.
    Ich finde aber nicht, dass switch in C# Programmierfehler vermeidet. Es ist imho einfach ein fehlendes Feature.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gonger96“ ()

    Ich möchte einfach Hobby mäßig programmieren.
    Welche Projekte ich da machen will weiß ich noch nicht.

    Deshalb ja die Frage: Wenn ich jetzt C++relativ gut beherrsche und ich parallel C# lerne ist das doch einfacher als wenn ich mit C# von 0 Anfange oder ?
    Mit Freundlichen Grüßen
    AtomiX

    Gonger96 schrieb:

    Ich finde aber nicht, dass switch in C# Programmierfehler vermeidet. Es ist imho einfach ein fehlendes Feature.


    Was ist denn an dem automatischen Fallthrough so vorteilhaft?
    Spoiler anzeigen

    C-Quellcode

    1. ​switch(x)
    2. ​{
    3. ​case w:
    4. // Mache nur w
    5. break;
    6. case y:
    7. // Mache y und anschließend Viel Zeugs
    8. case z:
    9. // Viel Zeugs
    10. }

    ​Sowas geht bspw.. Ist nichts Gravierendes, da man es nicht oft benötigt. Es geht aber und ist manchmal einfach übersichtlicher als "Viel Zeugs" auszulagern.
    ​War ja auch nur ein Beispiel bei dem ich oft ins Stolpern komme. Man erwartet nach dem F5 seine UI, der Compiler sagt dir aber, dass ein break fehlt. Letztens wollte ich für Irgendwas ne friend Klasse oder friend Funktion und musste dann feststellen, dass es das nicht gibt. Bei ein paar Dingen muss man dann halt umdenken. Das Framework ist auch komplett anders konzeptioniert als die STL bzw. die Standard Library. Vererbung ist nur public. Naja wie gesagt es hilft immer, wenn man schon eine Sprache kann und da beide auch noch C basiert sind ists natürlich sehr hilfreich.
    @Gonger96

    Das geht schon, nur halt nicht implizit, sondern nur explizit:

    C#-Quellcode

    1. switch(x)
    2. {
    3. case w:
    4. // Mache nur w
    5. break;
    6. case y:
    7. // Mache y und anschließend Viel Zeugs
    8. goto case z;
    9. case z:
    10. // Viel Zeugs
    11. break;
    12. }


    Das implizite Fallthrough wurde beim C# Sprachentwurf entfernt, da es sehr viele Bugs gab, weil Leute das break einfach vergessen hatten...
    Und was meintest du eigentlich mit der umständlichen Concurrency? C# hat ja sehr viele Möglichkeiten, Concurrency zu implementieren (Threads, Timers, Tasks etc.) Soweit ich weiß gab es bis C++11 oder so ja nicht mal eine sprachinterne Unterstützung für threads?
    Joa es ist aber 2018 ;) In C++ ist von komplexeren Anwendungen (Threads + Promise<> mit Mutex, Locks und guards) bis zu einfacheren Bereichen (std::async + future<> mit atomic Types) alles dabei. C# genauso. Ich brauchte nur etwas bis ich Tasks verstanden habe. Da finde ich std::async deutlich verständlicher. Will ich eine Funktion asynchron aufrufen, rufe ich sie mit async() auf und fertig. Ich muss nicht überlegen ob und was ich da awaiten muss und kann. Es ist in C# nicht schlechter aber anders.
    Ok. Alles klar

    Gonger96 schrieb:

    Sowas geht bspw.. Ist nichts Gravierendes, da man es nicht oft benötigt. Es geht aber und ist manchmal einfach übersichtlicher als "Viel Zeugs" auszulagern.
    War ja auch nur ein Beispiel bei dem ich oft ins Stolpern komme. Man erwartet nach dem F5 seine UI, der Compiler sagt dir aber, dass ein break fehlt. Letztens wollte ich für Irgendwas ne friend Klasse oder friend Funktion und musste dann feststellen, dass es das nicht gibt. Bei ein paar Dingen muss man dann halt umdenken. Das Framework ist auch komplett anders konzeptioniert als die STL bzw. die Standard Library. Vererbung ist nur public. Naja wie gesagt es hilft immer, wenn man schon eine Sprache kann und da beide auch noch C basiert sind ists natürlich sehr hilfreich.



    War das jetzt von C++ in C# oder von C# in C++?

    Aber an sich würdet ihr mir den Umstieg von C++ auf C# empfehlen, wenn ich C++ gut beherrsche ?
    Mit Freundlichen Grüßen
    AtomiX

    RushDen schrieb:

    Steig lieber auf Haskell um

    Haskell > C++/C#


    Wirklich?

    Ich würde halt wissen um es zu empfehlen ist von C++ auf C# umzusteigen.
    Weil an sich kenne ich mich in C++ schon gut aus, aber ich möchte halt wissen ob es anspruchsvoll ist von C++ auf C# zu wechseln und ob sich da viel ändert.
    Mit Freundlichen Grüßen
    AtomiX

    AtomiX schrieb:

    Aber an sich würdet ihr mir den Umstieg von C++ auf C# empfehlen, wenn ich C++ gut beherrsche ?
    Soweit ich weiss ist c++ sehr schwierig, aber auch mächtig gewaltig genial.
    Käme mir sehr ungewöhnlich vor, dass jmd, der c++ wirklich gut beherrscht, aus dem Nichts heraus auf die Idee verfallen würde, auf c# umzusteigen.
    Von einer modernen Sprache, die man beherrscht, steigt man ühaupt nie um.
    Man lernt allenfalls eine weitere hinzu - und üblicherweise hat man gute Gründe dazu (Problemstellungen, TeamProjekte, Arbeitsplatz, Neugier).

    Umsteigen tut man von veralteten Sprachen wie vb6 oder Basic oder Fortran.
    Oder man steigt von vb.net auf c# um - weil das einfach ist, und man c# besser findet.