Einstieg in C# für Fortgeschrittene Anfänger

Autokiller677

Fleet Admiral
Registriert
Jan. 2009
Beiträge
10.318
Hallo Zusammen,

ich will etwas C# lernen. Soweit so gut, es gibt Tutorials und was nicht noch. Mein "Problem" ist aktuell ein wenig, dass die meisten Tutorials von Anfänger ausgehen und daher bei Adam und Eva anfangen. Da ich aber schon 1 Semester C++ hinter mir habe und seit gut 2 Jahren im Nebenjob viel Python schreibe, weiß ich, wie Objektorientierung funktioniert, hab schonmal was vererbt, kenne Arrays, Listen und den ganzen Spaß und hab die Denkweise etwas drin. Daher brauche ich kein Anfänger Tutorial.

Allerdings verwirrt mich C# an einigen Stellen halt. Bei C++ habe ich für ein Kommandozeilentool
Code:
#include <iostream>
using namespace std;


int main ()
{
<code here>        
return 0;
}
geschrieben, gespeichert, g++ drüber und ab gings. In C# erscheint mir am Anfang alles etwas "klobiger", einfach nur eine Datei in den Compiler jagen scheint da selbst für einfache Programme nicht der normale Weg. Stattdessen wird in VS ein Projekt erstellt, das legt auf der Platte direkt mehrere Files an etc. und für ein simples Kommandozeilentool habe ich dann direkt sowas
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace HelloWorld
{
     class Program
    {
         static void Main(string[] args)
        {
        <code here>
        }
    }
}
mit Klasse, 4 Importen etc.

Daher suche ich eine Website / Buch / irgendwie geartete Einführung, die einem Umsteiger einen schnellen Überblick über die Konzepte gibt, weshalb etwas so gemacht wird, was good practice für eine Filestruktur im Projekt ist und so Sachen. Bisher habe ich das auch bei C++ und Python immer eher historisch wachsen lassen, was manchmal Umbauarbeiten erforderte, daher will ich es diesmal richtig machen.

Klar kann ich mich auch durch ein Anfänger Tutorial wühlen und neben dem ganzen langweiligen Kram hin und wieder die nützliche Info rausfischen, aber das würde ich mir gerne sparen wenn möglich.

Viele Grüße & vielen Dank,
​Autokiller
 
Wie du bereits richtig erkannt hast, bringen dich Bücher wie Galileo openbooks C# nicht weiter, weil da werden keine Konzepte erklärt, sondern nur eine Art "Wörterbuch" zur Verfügung gestellt.

Um dir ein gutes Buch empfehlen zu können, wäre es gut zu wissen, in welche Richtung es gehen soll. Websites mit ASP.NET MVC oder doch nur Desktop-Programme mit WPF und MVVM? Office-Erweiterungen oder irgendwelche verteilten Anwendungen a la WCF?

Prinzipiell gibt es schon Bücher, die sehr abstrakt nahezu alles abdecken, allerdings kann man mit einer Vertiefung noch ein paar Highlights im Buchmarkt rausuchen.

Zu deiner Sache mit den Imports und den Projekten: Es kommt auch darauf an mit was für einer IDE du arbeitest, VS arbeitet immer mit Projekten, andere quasi wie Notepad. Und Referenzen hast du in C++ genauso, die sind bloß teilweise etwas versteckt angegeben.
 
Grundsätzlich wird es erstmal in Richtung kleiner Standalone Programme gehen (Kleine GUI um ein paar Achsen zu bewegen und einen Taster auszulesen oder sowas, vom Hersteller gibts ne DLL oder es geht über einen seriellen Port mit einfachen Befehlen), also kleine Helfer, die den Alltag vereinfachen.

Web oder Office ist erstmal nicht angedacht.

Und was genau meinst du mit Referenzen? Da hatte ich ja jetzt explizit nichts von geschrieben und sehe auch im Beispielcode keine.
 
Also hier ein paar Empfehlungen:

Auf jeden Fall wirst du viel mit Unit Tests machen, da ist derzeit das die Empfehlung:
http://www.amazon.com/dp/1933988274/?tag=stackoverfl08-20

Du kannst natürlich deine GUI auch mit Windows Forms bauen, allerdings ist das erstens völlig veraltet und zweitens nicht toll testbar und unübersichtlich bei größeren GUIs auch noch, austauschbar ist es auch nicht. Deswegen meine Empfehlung WPF mit MVVM:

Online kostenlos: http://reedcopsey.com/series/windows-forms-to-mvvm/
Buch: http://www.amazon.com/dp/1430231629/?tag=stackoverfl08-20

Zu Projektstruktur und ähnliches macht es jeder etwas anderes. Prinzipiell kommt jede Klasse in eine Quell-Datei. Und Dateien gruppiert man in Ordnern mit ähnlichen Funktionstypen, zB. Ordner "ViewModels", "Views", "Model", "Service", "Persistence", "Configs" etc.

Falls du dazu fragen hast gerne per PM.

PS: Mit Referenzen meinte ich die Bibliotheken, die standardmäßig eingebunden sind, so zB. "System" oder "System.Linq". Bei deinem C++-Quellcode stehen nicht alle drin, die tasächlich zur Übersetzung gebraucht werden, da werden ein paar Standard-Libs nicht angezeigt. Bin jetzt aber auch kein C++-Experte. Bei deinem C#-Quellcode wird eigentlich nur die "System" gebraucht, der Rest ist überflüssig.
 
Zuletzt bearbeitet:
Autokiller677 schrieb:
Hallo Zusammen,

ich will etwas C# lernen. Soweit so gut, es gibt Tutorials und was nicht noch. Mein "Problem" ist aktuell ein wenig, dass die meisten Tutorials von Anfänger ausgehen und daher bei Adam und Eva anfangen. Da ich aber schon 1 Semester C++ hinter mir habe und seit gut 2 Jahren im Nebenjob viel Python schreibe, weiß ich, wie Objektorientierung funktioniert, hab schonmal was vererbt, kenne Arrays, Listen und den ganzen Spaß und hab die Denkweise etwas drin. Daher brauche ich kein Anfänger Tutorial.

Allerdings verwirrt mich C# an einigen Stellen halt. Bei C++ habe ich für ein Kommandozeilentool
Code:
#include <iostream>
using namespace std;


int main ()
{
<code here>        
return 0;
}
geschrieben, gespeichert, g++ drüber und ab gings. In C# erscheint mir am Anfang alles etwas "klobiger", einfach nur eine Datei in den Compiler jagen scheint da selbst für einfache Programme nicht der normale Weg. Stattdessen wird in VS ein Projekt erstellt, das legt auf der Platte direkt mehrere Files an etc. und für ein simples Kommandozeilentool habe ich dann direkt sowas
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace HelloWorld
{
     class Program
    {
         static void Main(string[] args)
        {
        <code here>
        }
    }
}
mit Klasse, 4 Importen etc.

Daher suche ich eine Website / Buch / irgendwie geartete Einführung, die einem Umsteiger einen schnellen Überblick über die Konzepte gibt, weshalb etwas so gemacht wird, was good practice für eine Filestruktur im Projekt ist und so Sachen. Bisher habe ich das auch bei C++ und Python immer eher historisch wachsen lassen, was manchmal Umbauarbeiten erforderte, daher will ich es diesmal richtig machen.

Klar kann ich mich auch durch ein Anfänger Tutorial wühlen und neben dem ganzen langweiligen Kram hin und wieder die nützliche Info rausfischen, aber das würde ich mir gerne sparen wenn möglich.

Viele Grüße & vielen Dank,
​Autokiller

Um mal auf das Beispiel einzugehen:
3 von den Imports kannst Du weglassen, Du brauchst nur System. Das VS Template stellt es aus Bequemlichkeit so zur Verfügung, da Du meist Klassen aus diesen Namespaces brauchst.
Du hast eine Klasse, weil C# relativ strikt objektorientiert ist. Klar man kann auch prozedural programmieren, das sollte man aber lassen. Als Einstiegspunkt in ein Programm sucht der Compiler halt immer eine statische Main Methode.
Es reicht auch eine Textdatei und ein Compiler zum Programmieren, ob man das wirklich will, sei mal dahingestellt.

C# ist auf möglichst gute Effizienz ausgelegt und da gehört sowas wie das VS und Projekt Templates, die Dir viel Arbeit abnehmen, einfach dazu.

Ich denke wenn Du schon 1 Jahr programmierst, brauchst Du kein Tutorial, Du brauchst ein Projekt, Dokumentation und Erfahrung. Die Dokumentation findest Du online in der MSDN. Grundsätzliche programmieren kannst Du ja, jede Sprache hat ein paar eigene Spezifika und Konstrukte, die wirst Du aber bei der Arbeit autom. kennenlernen, wenn Du Beispiele etc. ergooglest.
 
Zuletzt bearbeitet:
Thaxll'ssillyia schrieb:
Also hier ein paar Empfehlungen:
Du kannst natürlich deine GUI auch mit Windows Forms bauen, allerdings ist das erstens völlig veraltet und zweitens nicht toll testbar und unübersichtlich bei größeren GUIs auch noch, austauschbar ist es auch nicht. Deswegen meine Empfehlung WPF mit MVVM:
Du solltest aber auch noch erwähnen, dass die WPF durchaus ihre Nachteile hat. Angefangen von der Typunsicherheit in XAML bis dazu hin, dass die WPF Applikationen kaum bis nicht Refaktorierbar sind. Hier punktet Forms klar!

Dazu ist der Enwicklungsaufwand mit WPF deutlich höher. Insbesondere wenn ich eine Schichtentrennung mittls MVVM, MVP, MVC oder einem ähnlichen Muster realisieren möchte. Btw. ist eine wirklich saubere 100% Schichtentrennung auch mit den WPF nicht möglich.

Zudem basieren insbesondere viele technische Anwendungen und Libraries noch auf der Win32 API und benötigen z.B. ein Handle eines Controls. Da die WPF nicht mehr auf der Win32-API basiert sind einige Anwendungsfälle (z.B. mit Industriekameras) schlicht mit den WPF technisch nicht möglich. Hier hat u.a. Windows Forms noch seine Berechtigung.

Eine Faustregel: Je komplexer / größer ein Projekt, umso mehr lohnt sich WPF. Bis zu einem gewissen Aufwand implementiere ich ein Projekt in Windows Forms in der Hälfte der Zeit im Vergleich zu WPF. Und in der Regel sind die Fähigkeiten von Windows Forms ausreichend, um dem Kunden ein funktionierendes Produkt in ausreichender Qualität anbieten zu können.

Greetz
hroessler
 
Bisher habe ich für GUIs immer mit (Py)QT gebaut, aber so wie ich das bei Google sehe ist C# / QT keine tolle Option.

Da die Programme meist eher einfach sind und ich tatsächlich im Bereich von Industriekameras, Achssystemen & co unterwegs bin werde ich denke ich erstmal mit Windows Forms anfangen.

​Danke für die vielen Hinweise auf jeden Fall schonmal!
 
@hroessler:

Der höhere Entwicklungsaufwand ist richtig, dass ist aber fast immer so, wenn eine abstraktere, besser testbare und besser schichtbare Technologie aufkommt.

Zu alten APIs: Durchaus, es gibt da wohl noch ein paar Sachen die nicht mit WPF funktionieren. Ich muss dazu sagen dass ich damit selten in Kontakt gerate, und falls doch, mir das Control in WPF umschreibe.

Weil du sagst, dass du kleine Projekte mit Windows Forms entwickelst: Bei uns auf Arbeit ist des öfteren zu beobachten, dass die Kunden auch "schicke" Oberflächen haben wollen. Da Windows Forms noch den alten XP-Touch hat, der sich auch nur aufwändig stylen lässt, sind wir quasi dazu gezwungen, mit WPF zu entwickeln. Aber prinzipiell geb ich dir Recht, gerade wenn du nur zwei Buttons und ne Textbox brauchst, dann biste mit Windows Forms schneller.

@TE: Für dein Anwendungsfall ist dann wohl doch Windows Forms besser.
 
Naja für zwei Buttons und ne Textbox verwendet man in beiden Fällen sowieso nur den GUI Editor. Zu MVVM wird man nicht gezwungen und es ist durchaus vorteilhaft XAML zu können, denn auch Universal apps werden so programmiert und für Xamarin kann das auch hilfreich sein. Ich würde jetzt nicht anfangen Windows Forms zu lernen wenn du es technisch nicht brauchst. Ansonsten zwingt dich ja keiner bei WPF Binding usw. zu verwenden die es erst mal komplizierter machen.
 
Zuletzt bearbeitet:
Zurück
Oben