C# für Anfänger





Willkommen zur Einführung in die Programmiersprache C# !



Hier sind alle diejenigen genau richtig, die soeben noch "Tse-Fis" sagten und nicht "ßi-Scharp".
Bei unseren Erläuterungen beziehen wir uns auf Windows 10, aber auch unter Windows 7
sollte der größte Teil möglich sein.

Ansprechen möchten wir insbesondere den "Freak" oder "Frickler", der nur für seinen eigenen Bedarf
programmieren möchte.

Wichtig: Dies ist nur eine kleine Starthilfe, ohne Visual Studio 2019 und ohne Begriffe
wie "objektorientierte Programmierung", "Klassen", "Methoden" usw.

Ziel: schon in WENIGER ALS FÜNF MINUTEN soll Dein erstes C#-Programm starten!

Vorausgesetzt werden einige Grundkenntnisse im Umgang mit dem PC, z.B. die Funktion "copy + paste".

Wem die Erklärungen anfangs zu schnell gehen: die Vorgehensweise zur Programmerstellung und Kompilierung
wird weiter unten nochmals genauer beschrieben.

Wir empfehlen, ein Programm und seine Befehlsabfolge mit den Ergebnissen zu vergleichen und zur
Übung Änderungen im Quelltext vorzunehmen.

Besonders nett sind die Programme "Automatische Mausbewegungen und Tastatureingaben"
sowie das letzte Beispiel "Screenshots" zur Überwachung von Kindern.




Schritt eins, Anlegen einer Datei mit dem Namen "quellprogramm.cs"


Lege eine Textdatei mit dem Namen "quellprogramm.cs" an, zunächst mit rechter Maustaste
auf dem Desktop. Kopiere dorthinein den folgenden Programmtext beginnend mit
"using System;" und endend mit der letzten geschweiften Klammer.





using System;
using System.Threading;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello World!");
        Thread.Sleep(12000);
    }
}




Der Programmquelltext ist fertig. Im Grunde kommen später nur zwei Programmzeilen zur Ausführung:
Die Ausgabe von "Hello World!" und zwölf Sekunden Wartezeit.



Schritt zwei, Kompilierung des Quellprogramms


Jetzt folgt die Kompilierung. Dabei entsteht aus dem Quelltext die für den Computer lesbare .exe-Datei.
In unserem Beispiel soll sie program.exe heißen.

Kopiere folgende Anweisungen (wieder mit copy + paste) :


C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:C:\Users\EigenerName\Desktop\program.exe C:\Users\EigenerName\Desktop\quellprogramm.cs


Bei Windows 10 unten im Eingabefeld "powershell" eingeben und einfügen.
Bei Windows 7 <Windows-Taste> und <R> gleichzeitig drücken, "cmd" eingeben und einfügen.
"EigenerName" ist zu ersetzen durch den entsprechenden Ordnernamen Deines PC.

Zu beachten ist, dass die Cursor-Steuerung bei Powershell etwas anders ist.
Man sollte nur die Pfeiltasten rechts und links benutzen.

Jetzt die Enter-Taste drücken und es entsteht die Datei program.exe!
Möglicherweiser muss noch das blaue oder schwarze Fenster zur Seite geschoben werden.
Nun anklicken und für 12 Sekunden gehen Grüße an die Welt !

Es ist zweckmäßig, eine Datei mit dem Namen "compiler.ps1" anzulegen,
(bzw. compiler.bat bei Windows 7), dann erspart man sich einiges an Kopieren und Einfügen.




Beispiel: Addition von zwei ganzen Zahlen


Nach der Eingabe von zwei ganzen Zahlen werden diese addiert und das Ergebnis ausgegeben.
"int" bedeutet, dass die Variablen summand1, summand2 und summe ganzzahlige Werte annehmen sollen.



using System;
using System.Threading;

class Addition
{
    static void Main()
    {
        Console.WriteLine("Dieses Programm addiert zwei Zahlen, die Sie eingeben.");
        Console.WriteLine(" ");
        int summand1, summand2, summe;
        Console.WriteLine("Bitte geben Sie eine ganze Zahl ein, z.B. 328874");
        summand1 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Bitte geben Sie eine zweite ganze Zahl ein");
        summand2 = Convert.ToInt32(Console.ReadLine());
        summe = summand1 + summand2;
        Console.WriteLine(" ");
        Console.WriteLine("Das Ergebnis ist: " + summe);
        Thread.Sleep(10000);
    }
}

Übungsvorschlag 1: eine Differenz bilden Übungsvorschlag 2: auch die beiden Summanden ausgeben



Beispiel: Multiplikation von zwei Dezimalzahlen





using System;
using System.Threading;

class Multiplikation
{
    static void Main()
    {
        Console.WriteLine("Dieses Programm multipliziert zwei Zahlen, die Sie eingeben.");
        Console.WriteLine(" ");
        double m1, m2, prod ;
        Console.WriteLine("Bitte geben Sie eine Zahl ein");
        m1 = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("Bitte geben Sie eine zweite Zahl ein");
        m2 = Convert.ToDouble(Console.ReadLine());
        prod = m1 * m2;
        Console.WriteLine(" ");
        Console.WriteLine("Das Ergebnis ist: " + prod);
        Thread.Sleep(10000);
    }
}





Beispiel: Aufruf von Methoden





using System;
using System.Threading;

class Methoden
{
    static void Main()
    {
        Console.WriteLine("Guten Tag!");
        Console.WriteLine("      ");
        hollera();
        holleri();
        Thread.Sleep(500);
        Console.WriteLine("      ");
        Console.WriteLine("Dudödldi!");
        Console.WriteLine("      ");
        Console.WriteLine("Drücken Sie eine beliebige Taste zum Verlassen.");
        Console.ReadKey();
    }
    static void holleri()
    {
        Console.WriteLine("Hier ist die Methode holleri.");
    }
    static void hollera()
    {
        Console.WriteLine("Und hier ist die Methode hollera.");
    }
}




Beispiel: Aufruf von Methoden mit Datenübergabe





using System;
using System.Threading;

class Program
{
    static void Main()
    {
        holleri("Leonie ", "Finn ");
        hollera("Ayshe " , "Lukas ");
        Thread.Sleep(10000);
    }
    static void holleri(string kindername1, string kindername2)
    {
        Console.WriteLine("Willkommen " + kindername1 + "und " + kindername2 + "!");
    }
    static void hollera(string weitereskind3, string weitereskind4)
    {
        Console.WriteLine("Wir begrüßen auch " + weitereskind3 + "und " + weitereskind4 + "!");
    }
}




Beispiel: Lesen von Daten aus einer Textdatei


Im Folgenden können Datensätze einer Datei und dann anschließend Felder daraus eingelesen werden.
Vorher muss die Datei mit dem Namen "testdatei.txt" angelegt sein. Um Tipparbeit einzusparen, sind hier
einige Tiere aufgelistet. Diese sind nach testdatei.txt zu kopieren.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;

class ReadFromFile
{
    static void Main()
    {
        string eingabe = File.ReadLines("testdatei.txt").Skip(2).Take(1).First();
        string[] seg;
        seg = eingabe.Split(';');
        int i = 5 ;
        Console.WriteLine( seg[i] );
        Thread.Sleep(15000);
    }

    /*
    Bär;Dachs;Taube;Hirsch;Kuh;Pferd
    Hund;Katze;Maus;Tiger;Reh;Schwein
    Meise;Aal;Hering;Wal;Zebra;Eisbär;Butt;Seepferdchen;Gorilla
    Eule;Adler;Igel;Amsel;Schwan;Seehund;Biber
    Fuchs;Marder,Iltis;Möwe;Biene;Motte;Elefant;Nilpferd
    Antilope;Giraffe
    */
}

Übungsvorschlag 1: Das Programm so zu ändern und zu erweitern, dass die Tiere
"Reh" und "Biene" erscheinen.

Übungsvorschlag 2: Um einen Fehler hervorzurufen, Skip(2) auf Skip(10) ändern.
Dann wieder auf Skip(2) zurück und int i= 10 setzen.



Beispiel: Schreiben von Texten in eine Datei


Hier werden sechs Textzeilen in die Datei Ausgabe.txt geschrieben. Falls diese nicht existiert, wird
sie erstellt. Wenn Ausgabe.txt bereits vorhanden ist, werden die Datensätze angehängt.

Der Name "EigenerName" ist zu ersetzen durch den entsprechenden Ordnernamen Deines PC.
Zu Testzwecken ist dieses Programm kein Problem. In der Praxis sieht es etwas anders aus:
Es könnte sein, dass "Ausgabe.txt" schreibgeschützt ist. Da arbeitet man mit "try" und "catch",
das würde für den Anfang zu weit gehen.



using System;
using System.IO;
using System.Text;

class Test
{
    static void Main()
    {
        FileStream hipphipp;
        StreamWriter hurrahurra;
        string dateiname = "C:\\Users\\EigenerName\\Desktop\\Ausgabe.txt";
        hipphipp = new FileStream(dateiname, FileMode.Append);
        hurrahurra = new StreamWriter(hipphipp);
        hurrahurra.WriteLine("Datensatz 1");
        hurrahurra.WriteLine("Datensatz 2");
        hurrahurra.WriteLine("Datensatz 3");
        hurrahurra.WriteLine(" ");
        hurrahurra.WriteLine("-----------");
        hurrahurra.WriteLine(" ");
        hurrahurra.Close();
    }
}




Beispiel: Automatisierung von Mausbewegungen und Tastatureingaben


Ein recht interessantes Programm mit vielen Möglichkeiten!!!
Zu beachten ist, dass die Bildschirmkoordinaten abweichen können. Mit geeigneten Apps
aus dem Netz können diese angezeigt werden, so dass man sich Pixelzählen mit einer Lupe sparen kann.

Zunächst startet das Programm den google-Browser, der muss natürlich vorher installiert sein.
Ansonsten im quellprogramm.cs die entsprechende Zeile ersetzen durch beispielsweise
"Process.Start("C:\\Program Files\\Mozilla Firefox\\firefox.exe");".
Manchmal ist auch "Process.Start("C:\\Programme\\Google\\Chrome\\Application\\chrome");" erforderlich,
hier hilft leider nur ausprobieren.

Vor dem Start sollten keine minimierten Fenster auf der Taskleiste sein.

Es kann passieren, dass sich der Mauszeiger verirrt, dann einfach nochmal starten.



// Kommmentarzeilen, beginnen mit zwei Schrägstrichen und werden bei der
// Kompilierung nicht berücksichtigt
using System;
using System.Threading;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32", EntryPoint = "mouse_event")]
    private static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, IntPtr dwExtraInfo);
    private const Int32 MouseEventAbsolute = 0x8000;
    private const Int32 MouseEventLeftDown = 0x0002;
    private const Int32 MouseEventLeftUp = 0x0004;
    private const Int32 MouseEventMiddleDown = 0x0020;
    private const Int32 MouseEventMiddleUp = 0x0040;
    private const Int32 MouseEventMove = 0x0001;
    private const Int32 MouseEventRightDown = 0x0008;
    private const Int32 MouseEventRightUp = 0x0010;
    private const Int32 MouseEventXDown = 0x0080;
    private const Int32 MouseEventXUp = 0x0100;
    private const Int32 MouseEventWheel = 0x0800;
    private const Int32 MouseEventHWheel = 0x01000;
    static void Main()
    {
        Console.WriteLine("Start");
        Thread.Sleep(1000);
        //Process.Start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
        Process.Start("C:\\Programme\\Google\\Chrome\\Application\\chrome");
        Thread.Sleep(2000);
        SendKeys.SendWait("www.clavius.info");
        Thread.Sleep(2000);
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(1000);
        Cursor.Position = new System.Drawing.Point(100, 100);
        Thread.Sleep(1000);
        mouse_event(MouseEventMove, 50, 50, 0, new IntPtr());
        Thread.Sleep(1000);
        mouse_event(MouseEventMove, 50, 50, 0, new IntPtr());
        Thread.Sleep(1000);
        mouse_event(MouseEventMove, 50, 50, 0, new IntPtr());
        Thread.Sleep(1000);
        //Mausrad drehen
        mouse_event(MouseEventWheel, 0, 0, -120, new IntPtr());
        Thread.Sleep(1000);
        mouse_event(MouseEventWheel, 0, 0, -120, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventWheel, 0, 0, 120, new IntPtr());
        Thread.Sleep(1000);
        mouse_event(MouseEventWheel, 0, 0, 120, new IntPtr());
        Thread.Sleep(1000);
        Cursor.Position = new System.Drawing.Point(1000, 450);
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftDown, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventMove, 1, 200, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventMove, -1, -100, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventMove, 50, 1, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventMove, -50, 1, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftUp, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        //Fenster schließen
        Cursor.Position = new System.Drawing.Point(2000, 0);
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftDown, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftUp, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        Console.WriteLine("Schützenliesel, dreimal hat's gekracht");
        Thread.Sleep(2000);
        //Process.Start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
        Process.Start("C:\\Programme\\Google\\Chrome\\Application\\chrome");
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(2000);
        SendKeys.SendWait("www.sv-hilter.de");
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(5000);
        for (int i = 1; i <= 16; i++)
        {
           SendKeys.SendWait("{TAB}");
           Thread.Sleep(1000);
        }
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(2000);
        Cursor.Position = new System.Drawing.Point(1001,421);
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftDown, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        mouse_event(MouseEventLeftUp, 0, 0, 0, new IntPtr());
        Thread.Sleep(2000);
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(2000);
        SendKeys.SendWait("{TAB}");
        Thread.Sleep(2000);
        SendKeys.SendWait("Larry");
        Thread.Sleep(2000);
        SendKeys.SendWait("{TAB}");
        Thread.Sleep(2000);
        SendKeys.SendWait("larry@gmx.de");
        Thread.Sleep(2000);
        SendKeys.SendWait("{TAB}");
        Thread.Sleep(2000);
        SendKeys.SendWait("Ein Hoch den wackeren Schützen! ");
    }
}

Übungsvorschlag: Mit Hilfe von Dokumentation im Internet zwei Tastendrucke gleichzeitig simulieren.



Beispiel: Ausgabe der Primzahlen von 2-20000 in eine Tabelle


In der Praxis wäre die hier vorgestellte Art, Primzahlen zu berechnen, völlig ungeeignet.
Wenn man eine Zahl testet, dann genügt es, die Divisionen bis zur Wurzel aus der Zahl durchzuführen.
Also 1.000 muss nur durch maximal 31 geteilt werden. "Math.Truncate" schneidet Nachkommastellen ab.
Die Zeile "div= kandidat % primf;" sorgt dafür, dass "div" nur die Nachkommastellen enthält.
Zu beachten die Primzahllücke (39 Stück) zwischen 19.333 und 19.373 .
Es gibt unendlich viele Primzahlen (Beweis von Euklid).
Es gibt beliebig große Primzahllücken (Beweis mit Fakultäten, also z.B. (7*6*5*4*3*2) + 2
ist durch 2 teilbar (7*6*5*4*3*2) + 3 ist durch 3 teilbar usw.)




using System;
using System.IO;
using System.Text;
using System.Threading;

class Primzahltest
{
    static void Main()
    {
        Console.WriteLine("Start, Dauer etwa 20 Sekunden, Ende-Meldung abwarten");
        int kandidat;
        for (kandidat = 2; kandidat<=20000; kandidat++)
        {
            primzahlfeststellung(kandidat);
        }
        Console.WriteLine("Ende des Programms");
        Thread.Sleep(3000);
    }

    static void primzahlfeststellung(int kandidat)
    {
        double div=0;
        double wurzelauskdt=0;
        double wurzelaus=0;
        double primf=0;
        double pverd=0;
        wurzelaus= Math.Sqrt(kandidat);
        wurzelauskdt= Math.Truncate(wurzelaus);
        for (primf = 2; primf<=wurzelauskdt; primf++)
        {
            div= kandidat % primf;
            if (div != 0)
            {
                pverd=0;
            }
            else
             {
                pverd=1;
                break;
             }
        }

        //Auswertung, ob der Kandidat eine Primzahl ist oder nicht
        if (pverd == 1)
        {
        }
        else
         {
                ausgabe(kandidat);
         }
    }

    //Ausgabe jeder Primzahl auf Primzahlen.txt
    static void ausgabe(int kandidat)
    {
        FileStream hipphipp;
        StreamWriter hurra;
        string dateiname = "C:\\Users\\Thilo\\Desktop\\Primzahlen.txt";
        hipphipp = new FileStream(dateiname, FileMode.Append);
        hurra = new StreamWriter(hipphipp);
        hurra.WriteLine(kandidat);
        hurra.Close();
    }
}

Übungsvorschlag: ebenfalls alle Nicht-Primzahlen ausgeben, jedoch dargestellt mit "*".
So lassen sich schnell Primzahllücken erkennen.



Beispiel: Einige mathematische Funktionen





using System;
using System.Threading;

class Funktionen
{
    static void Main()
    {
        Console.WriteLine("Die Eulersche Zahl e und die Kreiszahl pi lauten: " + Math.E + " " +"und " + Math.PI);
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine("Potenzieren zweier Zahlen");
        Console.WriteLine(" ");
        double m1, m2, potenz ;
        Console.WriteLine("Bitte geben Sie die Basis ein");
        m1 = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("Bitte geben Sie den Exponenten ein");
        m2 = Convert.ToDouble(Console.ReadLine());
        potenz = Math.Pow(m1, m2);
        Console.WriteLine("Das Ergebnis ist: " + potenz);
        Thread.Sleep(3000);
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        m1=0;
        m2=0;
        potenz=0;
        Console.WriteLine("Potenzieren mit der Basis e");
        Console.WriteLine(" ");
        Console.WriteLine("Bitte geben Sie den Exponenten ein");
        m1 = Convert.ToDouble(Console.ReadLine());
        potenz=Math.Exp(m1);
        Console.WriteLine("Das Ergebnis ist: " + potenz);
        Thread.Sleep(3000);
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Thread.Sleep(3000);
        Console.WriteLine("Sinus aus einem Winkel");
        Console.WriteLine(" ");
        double alpha, sinalpha;
        Console.WriteLine("Bitte geben Sie einen Winkel in Grad ein");
        alpha = Convert.ToDouble(Console.ReadLine());
        sinalpha = Math.Sin(alpha*Math.PI/180);
        Console.WriteLine("Der Sinus aus " + alpha + " Grad ist " + sinalpha);
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine("Drücken Sie eine beliebige Taste zum Verlassen");
        Console.ReadKey();
    }
}

Übungsvorschlag: den Logarithmus einer Zahl zur Basis 10 und zur Basis e berechnen.
Dazu werden jedoch Dokumentation aus dem Internet oder Handbücher erforderlich sein.



Beispiel: Zufallszahlengenerator


Der C#-Zufallszahlengenerator ist eher ungeeignet, erst recht, wenn man größere
Mengen von ihnen braucht. Das Entfernen der beiden Kommentar-Schrägstriche bringt
nichts, erst das Herausziehen von "var r = new Random();" aus der Schleife verkleinert
das Problem der doppelten und der aufsteigenden Zahlen etwas.




using System;
using System.Threading;

class Zufall
{
    static void Main()
    {
        for (int i=0; i<100; i++)
        {
            var r = new Random();
            int a = r.Next(10,20);
            Console.WriteLine(a);
            //Thread.Sleep(1000);
        }
        Console.WriteLine("Ende");
        Thread.Sleep(100000);
    }
}







Letztes Beispiel: Screenshots


Du willst Deine Kinder kontrollieren und wissen, was diese so im Internet treiben? Kein Problem.
Hier brauchen wir zwei Programme, das zweite ruft das erste auf. Man kann beide in einem beliebigen
Ordner verstecken. Der Pfadname muss natürlich angepasst werden.
Das Programm ist unverträglich mit manchen geöffneten Systemfenstern.
Auch der Mauszeiger erscheint nicht. Unter Windows 10 mit Hilfe
der Aufgabenplanung alle 5 Minuten starten.




using System;
using System.Drawing;
using System.Windows.Forms;

class Program
{
    [STAThread]
    static void Main()
    {
        DateTime date = new DateTime();
        date = DateTime.Now;
        string stempel = date.ToString("yyyyMMddHHmmss");
        SendKeys.SendWait("{PRTSC}");
        Image myImage = Clipboard.GetImage();
        myImage.Save("C:\\Users\\Eigenername\\Desktop\\bild" + stempel +".jpg");
    }
}




Nach dem Kompilieren program umbenennen in program1.



using System;
using System.Windows.Forms;
using System.Diagnostics;

class Program
{
    [STAThread]
    static void Main()
    {
        string exePath = "program1.exe";
        string arguments = "";
        Process process = new Process();
        process.StartInfo.FileName = exePath;
        process.StartInfo.Arguments = arguments;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();
        Environment.Exit(0);
    }
}







An dieser Stelle ist die kleine Einführung in C# beendet und man sollte ab jetzt mit Visual Studio 2019
(Download kostenlos) weiterarbeiten. Kleiner Hinweis: Unter Windows Forms-App wird "SendKeys"
nicht anerkannt, aus mir nicht verständlichen Gründen. Also dort das Beispiel "Automatisierung
von Mausbewegungen und Tastatureingaben" mit "Konsolen App" bearbeiten. Des weiteren empfehlen
wir "C# Tutorial Deutsch" auf youtube und das Buch "Einstieg in C# mit Visual Studio 2019"
von Thomas Theis aus dem Rheinwerk-Verlag. Tipp: In Visual Studio immer den Projektmappen-Explorer
öffnen. Zu finden unter "Ansicht".

Viel Erfolg!












Anhang: Test auf Vorhandensein notwendiger Komponenten


Falls das Kompilieren zu Fehlern führt, empfiehlt sich folgende Prüfung:
Klicke auf das Startsymbol ganz unten links mit der rechten Maustaste. Dann auf

Explorer >
Dieser PC >
Lokaler Datenträger (C:) >
Windows >
Microsoft.NET >
Framework >
v4.0.30319 .

In der Auflistung sollte csc stehen.



Anlegen einer Datei mit dem Namen "quellprogramm.cs"


Lege eine Textdatei mit dem Namen "quellprogramm.cs" an. Später kann man auch einen anderen
Dateinamen wählen, wichtig ist jedoch die Endung ".cs", die den Dateityp angibt.

Verkleinere dieses Browser-Fenster und klicke mit der rechten Maustaste irgendwo auf den
Desktop-Bildschirmhintergrund, ziehe dann auf "Neu" und klicke auf "Textdokument".
Öffnung durch Doppelklick auf das Symbol. Dann "Datei" und "Speichern unter". Als Dateiname
"quellprogramm.cs" angeben.

Mit gedrückter linker Maustaste zieht man über den folgenden Programmtext und zwar von using System
bis zur letzten Klammer. Den markierten Text mit rechter Maustaste anklicken und dann auf "Kopieren"
gehen. Nun die leere Datei "quellprogramm.cs" öffnen und den Text mit Hilfe der rechten Maustaste einfügen.
Zum Schluß speichern.



using System;
using System.Threading;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello World!");
        Thread.Sleep(12000);
    }
}




Der Programmquelltext ist fertig. Im Grunde kommen später nur zwei Programmzeilen zur Ausführung:
Die Ausgabe von "Hello World!" und zwölf Sekunden Wartezeit.



Kompilierung des Quellprogramms


Jetzt folgt die Kompilierung. Dabei entsteht aus dem Quelltext die für den Computer lesbare .exe-Datei.
In unserem Beispiel heißt sie program.exe .

Kopiere folgende Anweisungen (wieder mit copy + paste) :


C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:C:\Users\EigenerName\Desktop\program.exe C:\Users\EigenerName\Desktop\quellprogramm.cs


Im Eingabefeld ganz unten "Powershell" angeben und dann öffnen, es sollte ein blaues Fenster erscheinen.
Dort mit der rechten Maustaste einfügen.

Der Name "EigenerName" ist zu ersetzen durch den entsprechenden Ordnernamen Deines PC.
Dieser steht entweder im Fenster oder kann ermittelt werden durch Start (unten links)
Explorer >
Lokaler Datenträger (C:) >
Benutzer .

Unter dem Ordner "Öffentlich" ist der gesuchte Name.

Zu beachten ist, dass die Cursor-Steuerung bei Powershell etwas anders ist.
Man sollte nur die Pfeiltasten rechts und links benutzen.

Jetzt die Enter-Taste drücken und es entsteht die Datei program.exe!
Möglicherweiser muss noch das blaue Fenster zur Seite geschoben werden.
Nun anklicken und für 12 Sekunden gehen Grüße an die Welt !