Arbeiten mit .NET: Allgemeines/ Entwicklungsumgebungen/ SharpDevelop

Aus Wikibooks
Dieses Kapitel beschreibt für SharpDevelop spezifische Vorgehensweisen. Nutzer einer anderen IDE richten sich bitte nach den Informationen in Microsoft Visual Studio oder MonoDevelop.
Wikipedia hat einen Artikel zum Thema:

Eine komfortable IDE[Bearbeiten]

SharpDevelop (auch als #D bezeichnet) ist eine vollständige IDE (Integrated Development Environment, also Integrierte Entwicklungsumgebung) und bietet alles, was das Programmieren erleichtert:

  • Syntax-Hervorhebung
  • Code-Vervollständigung
  • Zusammenfassung mehrerer Quelltexte zu Projekten
  • schneller Wechsel zum Compiler mit Debugger
  • integrierte Hilfe zum .NET Framework

SharpDevelop steht kostenlos zur Verfügung und kann auch auf einem USB-Stick lauffähig installiert werden, siehe Weblinks.

Installation und Einrichtung[Bearbeiten]

#D verfügt über eine Installationsroutine. Voraussetzung ist aber, dass das .NET Framework in einer passenden Version bereits installiert ist, und zwar sowohl mit der Laufzeitumgebung als auch mit dem SDK. Einzelheiten dazu siehe .NET installieren.

Achtung: Wenn Sie planen, SharpDevelop und Microsoft Visual Studio parallel zu installieren, empfehlen wir Ihnen dringend, zuerst das für Sie "unwichtigere" Programm zu installieren. Durch die folgende Installation werden unter Umständen die Dateizuordnungen der ersten Installation beschädigt. Bei einer Installation beider IDE gilt deshalb: immer erst die Zweitumgebung und dann die Hauptentwicklungsumgebung installieren.

Einstellungen[Bearbeiten]

Nach dem Start wartet, wie bei jedem komplexen Programm, die Einrichtung der Oberfläche. Dazu öffnen Sie den Optionsdialog im Menü Extras. Legen Sie dort zunächst folgende Einstellungen fest:

  • Unter SharpDevelop Optionen – UI wählen Sie die Sprache für das Programm.
  • Unter SharpDevelop Optionen – Visueller Stil wählen Sie die bevorzugte Programmiersprache.
  • Unter SharpDevelop Optionen – Projekte und Projektmappen legen Sie ein Standardverzeichnis für Ihre Projekte fest und steuern, ob die zuletzt bearbeitete Projektmappe stets aktiviert werden soll oder ob stattdessen die Startseite anzuzeigen ist.
  • Unter Tools – Help-System wählen Sie eine der Varianten zur .NET-Dokumentation aus; Dadurch steht die äußerst umfangreiche MSDN-Library auch unter SharpDevelop zur Verfügung.
  • Unter Windows Forms Designer – Rastereinstellungen wählen Sie den Ausrichtungsmodus Am Gitter einrasten und aktivieren, falls nicht schon vorgegeben, die beiden Kontrollkästchen weiter unten.

Alle anderen Optionen können Sie sich einmal ansehen und später bei Bedarf anpassen. Wir weisen vor allem auf die Einstellungen zum Text-Editor und auf die Code-Schablonen hin. Bestätigen Sie die Festlegungen mit OK.

Die Oberfläche[Bearbeiten]

SharpDevelop orientiert sich dabei sehr stark am Microsoft-Vorbild. Dadurch fällt es relativ leicht, zwischen den beiden IDE zu wechseln; lediglich die Verteilung der Zusatzfenster unterscheidet sich.

Der größte Teil des Bildschirms wird vom Hauptfenster eingenommen. Es enthält ggf. die Startseite mit den zuletzt bearbeiteten Projekten und während der Laufzeit die geöffneten Dokumente. Dieses Hauptfenster wird eingerahmt von verschiedenen zusätzlichen Informationen und Fenstern zur Auswahl:

  • Links finden Sie:
    • die Übersicht der Projekte einer Projektmappe mit allen ihren Informationen
    • die Übersicht von Tools (Werkzeugen), die bei WinForms-Anwendungen auch die Controls anbietet
  • Rechts finden Sie:
    • die Übersicht der Klassen einer Projektmappe
    • die Eigenschaften, vor allem wenn ein Formular in der Designer-Ansicht geöffnet ist
  • Unten finden Sie:
    • Fehlermeldungen und Warnungen
    • Aufgaben, die in verschiedenen Programmteilen zu erledigen sind
    • Ausgabe während des Programmablaufs
    • Lokale Variable zum Debuggen während des Programmablaufs

Diese Fenster kann man bei Bedarf ein- und ausblenden. Im ausgefahrenen Zustand findet sich im Titel eines solchen Fensters neben dem obligatorischen X zum Schließen eine Pinnnadel. Ein Klick stellt sie auf und verhindert, dass das Fenster automatisch ausgeblendet wird; ein erneuter Klick hebt diese Verankerung auf. Im Menü Ansicht können Sie diese Fenster nach Bedarf öffnen.

Die Bedienung[Bearbeiten]

Das Programm kann selbstverständlich über die Menü-Befehle als auch über die Schaltflächen bedient werden. Sehr viele Punkte sind auch über die Tastatur zu erreichen.

Ein erstes Projekt[Bearbeiten]

Hello World[Bearbeiten]

Das einfachste Programm ist ein Hello World-Programm, das lediglich diesen Text ausgibt. Ein solches Programm dient seit Urzeiten in Lehrbüchern einmal als Test für den Lernenden, um sich mit der Programmierumgebung vertraut zu machen und zu prüfen, ob alles funktioniert. Andererseits zeigt es die notwendige Grundstruktur eines Programms auf. Ein solches Programm enthält eigentlich nur die folgenden Zeilen:

Hello World als Einstieg
C++-Quelltext
System::Console::WriteLine("Hello World");
System::Console::WriteLine("Ende mit beliebiger Taste");
System::Console::ReadKey();
C#-Quelltext
System.Console.WriteLine("Hello World");
System.Console.WriteLine("Ende mit beliebiger Taste");
System.Console.ReadKey();
Delphi.Prism-Quelltext
System.Console.WriteLine('Hello World');
System.Console.WriteLine('Ende mit beliebiger Taste');
System.Console.ReadKey();
VB.NET-Quelltext
System.Console.WriteLine("Hello World")
System.Console.WriteLine("Ende mit beliebiger Taste")
System.Console.ReadKey()


"Mein neues Auto" als Einstieg[Bearbeiten]

Wir wollen ein etwas größeres Projekt vorbereiten, das später ausführlicher besprochen werden soll.

Eine Projektmappe (Englisch solution, also Problemlösung) enthält mehrere, in der Regel inhaltlich zusammengehörende Projekte. Ein Projekt (project) enthält alles, was zum Erstellen einer einzelnen Assembly (exe- oder dll-Datei) unter .NET notwendig ist.

Das folgende Programm wird auch im Kapitel "Mein neues Auto" als erstes Programm bei jeder Programmiersprache besprochen. Einzelheiten des Codes werden deshalb hier überhaupt nicht erklärt; jetzt geht es uns nur um die Möglichkeiten der IDE mit der Eingabe des Codes, dem Erstellen des Programms und der Fehlersuche.

Ein Projekt hinzufügen[Bearbeiten]

Für eine neue Projektmappe gibt es diese Möglichkeiten:

  • Klicken Sie auf der Startseite auf Neue Solution.
  • Wählen Sie im Menü Datei > Neu > Projektmappe.

Für ein neues Projekt gibt es diese Möglichkeit:

  • Rechtsklick auf die Projektmappe im Projekte-Fenster und Hinzufügen > Neues Projekt.

Es öffnet sich ein Dialog für die grundlegenden Einstellungen des neuen Projekts. Wählen Sie in der linken Liste Ihre Programmiersprache und dann Windowsanwendungen aus und rechts Konsolenanwendung. Geben Sie ein Verzeichnis für die Projektmappe an, z.B. "E:\Eigene Dateien\NET Projects\Wikibooks\Einstieg", und einen Namen für das Projekt, z.B. "Mein neues Auto". Bestätigen Sie die Eingaben durch Klicken auf Erstellen. Die IDE erstellt ein Gerüst mit allen Dateien, die für das neue Projekt nötig sind.

Solange es uns um einzelne Funktionalitäten der Arbeit mit .NET oder einer Programmiersprache geht, werden wir uns vorwiegend mit Konsolenanwendungen befassen. Andere Anwendungen werden in den Themen-Büchern behandelt.

Der Quelltext-Editor[Bearbeiten]

Je nach Situation wird das Hauptprogramm bereits angezeigt; oder Sie müssen es auswählen: Öffnen Sie unter Projekte, bis die Datei Program (je nachdem mit der Extension cs, vb, c o.a.) angezeigt wird. Doppelklick darauf zeigt sie an.

Dreist, wie SharpDevelop ist, hat es für uns bereits ein komplettes Hello-World-Programm geschrieben. Damit wir die Arbeitsweise von SharpDevelop demonstrieren können, ändern Sie den vorgegebenen Code, sodass der untenstehende Code zu sehen ist.

  • Löschen Sie zunächst die Zeilen mit Hello World und Todo.
  • Bei Visual Basic ergänzen Sie am Anfang und Ende die Zeilen mit Namespace.
  • Schreiben Sie den untenstehenden Code, und zwar bis einschließlich der ersten Zeile mit WriteLine. Beenden Sie den Code mit den drei Schlusszeilen.
  • Beachten Sie, dass Einrückungen automatisch erfolgen.
  • Schreiben Sie langsam und machen Sie vor allem nach einem Punkt und einer öffnenden Klammer eine kurze Pause.
  • Schreiben Sie nach einem Punkt erst einmal nur einen Buchstaben und warten Sie wieder.

Achten Sie dabei darauf, was die IDE sozusagen vorschreibt (im Sinne von "voraus schreibt") und als Erläuterungen anzeigt. Hier bietet SharpDevelop Möglichkeiten an, die Zeile logisch zu beenden. Wenn weitere Informationen angeboten werden (durch einen Text wie "2 von 19"), dann blättern Sie mit den Pfeiltasten weiter.

Es ist nicht erforderlich, dass Sie alle Informationen sofort verstehen. Es geht jetzt nur darum, dass diese Hilfestellung angeboten wird, damit Sie bei der eigenen Programmierung darauf achten und dies nutzen.

Das Hauptprogramm
C#-Quelltext
using System;

namespace Wikibooks.CSharp.Mein_neues_Auto
{
	class Program
	{
		public static void Main(string[] args)
		{
			string input;
			if (DateTime.Now.Hour < 12) {
				Console.Write("Guten Morgen, ");
			} else if (DateTime.Now.Hour < 18) {
				Console.Write("Grüß Gott, ");
			} else 
				Console.Write("Guten Abend, ");
			Console.WriteLine(Environment.UserName);
			
			// Typ abfragen
			Console.WriteLine("Welchen Typ Auto wollen Sie sich zulegen?");
			input = Console.ReadLine();
			Car mycar = new Car(input, "998cm³ 44kW", 3);
			Console.WriteLine(mycar.ToString());
			// beschleunigen
			mycar.Accelerate(40);
			mycar.ShowValues();
			// rechts blinken
			mycar.SetRightSignal(true);
			mycar.ShowValues();
			// etwas bremsen
			mycar.Delay(20);
			mycar.ShowValues();
			// Blinker aus
			mycar.SetRightSignal(false);
			mycar.ShowValues();
			// wieder beschleunigen
			mycar.Accelerate(30);
			mycar.ShowValues();
			// Warnblinker ein
			mycar.SetBothSignals(true);
			mycar.ShowValues();
			// bremsen bis auf 0
			mycar.Delay(mycar.Speed);
			mycar.ShowValues();
			// Warnblinker aus
			mycar.SetBothSignals(false);
			mycar.ShowValues();
			                  
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}
VB.NET-Quelltext
Imports System

Namespace Wikibooks.VBNet.Mein_neues_Auto
	Module Program
		Sub Main(ByVal args As String())
			Dim input As String
			If DateTime.Now.Hour < 12 Then
				Console.Write("Guten Morgen, ")
			ElseIf DateTime.Now.Hour < 18 Then
				Console.Write("Grüß Gott, ")
			Else
				Console.Write("Guten Abend, ")
			End If
			Console.WriteLine(Environment.UserName)
			
			' Typ abfragen
			Console.WriteLine("Welchen Typ Auto wollen Sie sich zulegen?")
			input = Console.ReadLine()
			Dim mycar As New Car(input, "998cm³ 44kW", 3)
			Console.WriteLine(mycar.ToString())
			' beschleunigen
			mycar.Accelerate(40)
			mycar.ShowValues()
			' rechts blinken
			mycar.SetRightSignal(True)
			mycar.ShowValues()
			' etwas bremsen
			mycar.Delay(20)
			mycar.ShowValues()
			' Blinker aus
			mycar.SetRightSignal(False)
			mycar.ShowValues()
			' wieder beschleunigen
			mycar.Accelerate(30)
			mycar.ShowValues()
			' Warnblinker ein
			mycar.SetBothSignals(True)
			mycar.ShowValues()
			' bremsen bis auf 0
			mycar.Delay(mycar.Speed)
			mycar.ShowValues()
			' Warnblinker aus
			mycar.SetBothSignals(False)
			mycar.ShowValues()
			
			Console.Write("Press any key to continue . . . ")
			Console.ReadKey(True)
		End Sub
	End Module
End Namespace

Diese Art, wie Code-Teile vorgeschlagen werden, wird als Code-Completion (Code-Vervollständigung) bezeichnet. Der ebenfalls verwendete Begriff IntelliSense ist für Microsoft Visual Studio reserviert.

Beachten Sie die folgenden Besonderheiten der Anzeige:

  • Bestimmte Abschnitte des Codes sind farbig. Diese Funktion heißt Syntaxhervorhebung. Blaue Wörter sind zum Beispiel Begriffe, die im Code eine besondere Bedeutung haben, sogenannte Schlüsselwörter (dazu später mehr).
  • Die Wörter in Anführungszeichen sind Zeichenketten, die im Programm erscheinen, wie wir gleich sehen. SharpDevelop hebt diese bei VB, anders als z.B. Microsoft Visual Basic oder dieses Wikibook, nicht farblich hervor.
  • Mit der TODO-Anweisung können Sie sich selbst darauf hinweisen, was hier noch zu erledigen ist; über die Liste der Aufgaben können Sie dorthin springen und so manche Programmteile auf später verschieben.

Mit diesem Code soll nun die IDE arbeiten.

Dateien speichern[Bearbeiten]

Vor dem nächsten Schritt speichert SharpDevelop die betroffenen Quelldateien automatisch. Wenn Sie während umfangreicher Arbeiten nicht kompilieren, sondern die IDE beenden, können Sie die geänderten Dateien gezielt speichern. Welche Dateien seit der letzten Speicherung geändert wurden, ersehen Sie aus dem Sternchen    Program.cs *    beim Dateinamen. Sie können so speichern:

  • mit einem Klick auf das Diskettensymbol oder Strg + S die aktuelle Datei
  • mit einem Klick auf den Diskettenstapel oder Strg + Shift + S alle geöffneten Dateien.

Das Kompilieren[Bearbeiten]

Vorbereitung nur für C# und C++: Fügen Sie hinter das letzte else eine öffnende Klammer { ein.

Zunächst muss das Programm erstellt, also kompiliert werden. Das bedeutet, dass der ursprüngliche (von Ihnen geschriebene) Code in den .NET-Zwischencode übersetzt werden muss. Dies geschieht auf einem dieser Wege:

  • durch F9
  • über den Menü-Punkt Erstellen > Erstelle Mein neues Auto
  • über das Projekte-Fenster durch Rechtsclick auf den Projekt-Namen "Mein neues Auto" und Erstellen
Kompilieren mit einem Fehler

Starten Sie also das Kompilieren. Leider enthält das Programm Fehler, die uns der Compiler mitteilt:

// bei C# und C++
Program.cs(33,2) : Fehler CS1513: } erwartet.
' bei VB
Program.vb(17,0) : Fehler BC30081: "If" muss mit einem zugehörigen "End If" abgeschlossen werden.

VB ist in diesem Fall genauer, weil die richtige Stelle angegeben wird. Das letzte Else wurde mit End abgeschlossen, es muss aber – wie die Fehlermeldung feststellt – mit End If beendet werden.

Bei den C-Varianten wird nur festgestellt, dass die Klammerpaare {...} nicht zusammenpassen: Es gibt eine öffnende Klammer ohne dazugehörige schließende Klammer. In diesem Fall ist es einfach: Zu der unter Vorbereitung eingegebenen Klammer fehlt der Partner; machen Sie dazu nach dem nächsten Write-Befehl eine neue Zeile und schreiben Sie die fehlende Klammer } hin. Sie werden sofort sehen, zu welchem Partner diese gehört. Probieren Sie das Schreiben dieser Klammern aus; in der Regel bekommen Sie zu einer öffnenden Klammer sofort den Partner und werden den folgenden Code dazwischen schreiben.

Wenn Sie „spaßeshalber“ einmal die öffnende Klammer entfernen, werden Sie mit vielen Fehlermeldungen bombardiert. Das untersuchen wir in späteren Kapiteln.

Speichern Sie die geänderte Datei.

Kompilieren mit einer Warnung

Kompilieren Sie das Programm erneut. Es sollte keine Fehler mehr aufweisen, liefert aber eine Warnung:

// bei C# und C++
Die Variable input ist deklariert, wird aber nicht verwendet.
' bei VB 
Nicht verwendete lokale Variable: input.

Warnungen können theoretisch ignoriert werden; das Programm kann trotzdem ablaufen. In aller Regel ist damit aber eine Unsauberkeit im Code enthalten; deshalb sollten Sie sich immer um die Beseitigung von Warnungen kümmern. Hier wurde sie provoziert: Kopieren Sie den gesamten noch fehlenden Programmtext und speichern Sie die geänderte Datei.

Kompilieren mit weiteren Fehlern

Kompilieren Sie erneut. Nun gibt es eine Menge gleichartiger Fehlermeldungen:

Der Typ- oder Namespacename Car konnte nicht gefunden werden.
// bei C++, C#
(Fehlt eine using-Direktive oder ein Assemblyverweis?)
' bei VB
(Fehlt eine Imports-Direktive oder ein Assemblyverweis?)

Nun ja, die Definition der Klasse Car fehlt noch völlig. Also erstellen wir eine weitere Quelldatei:

  • Für C# mit Rechtsklick auf Car.cs mit der Auswahl "Ziel speichern unter" dem Namen Car.cs im Quellverzeichnis
  • Für VB mit Rechtsklick auf Car.vb mit der Auswahl "Ziel speichern unter" dem Namen Car.vb im Quellverzeichnis

Diese Quelldatei fügen wir unserem Projekt hinzu: im Projekte-Fenster nach Rechtsklick auf den Projektnamen über Hinzufügen > Vorhandene Datei die gerade gespeicherte Datei auswählen. Sofern diese Datei nicht sofort angezeigt wird, können Sie sie mit Doppelklick öffnen und überprüfen.

Um eine weitere Fehlermeldung zu vermeiden, die wir erst später besprechen wollen, gehen Sie im Projekt-Fenster mit Rechtsklick auf Referenzen und wählen über Hinzufügen im Bereich "GAC" die Assembly System.Drawing (mit Doppelklick oder "Wählen") aus und bestätigen mit OK.

Damit können wir erneut und endgültig kompilieren; es sollten keine Meldungen bleiben.

Das Ausführen[Bearbeiten]

Jetzt können wir das Programm ablaufen lassen; es gibt wieder mehrere Möglichkeiten:

  • durch F5
  • über den Menü-Punkt Projekt > Projekt starten
  • über den Menü-Punkt Debuggen > Ausführen
  • über das Projekte-Fenster durch Rechtsclick auf den Projekt-Namen und Projekt starten
  • über die Symbolleiste durch Klick auf den grünen Pfeil

Der letzte Weg führt nicht immer direkt zum Ziel: Wenn die Projektmappe mehrere Projekte enthält, werden zunächst alle Projekte neu kompiliert; es wird diejenige Anwendung gestartet, die als Startprojekt festgelegt wurde.

Ein fertiges Programm kann auch "normal" gestartet werden – wie jedes installierte Programm auch:

  • in der Eingabeaufforderung direkt "Mein neues Auto" aufrufen (wegen des Leerzeichens sind die Gänsefüßchen notwendig)
  • durch Doppelklick im Inhaltsverzeichnis z.B. des Windows-Explorers oder eines Commanders

Der Programmablauf öffnet ein Konsolenfenster:

Ausgabe
'"`UNIQ--syntaxhighlight-0000000C-QINU`"'

Darin werden Ausgabezeilen angezeigt, nämlich alles, was mit Write und WriteLine angegeben wurde, und es enthält verschiedene Eingaben, nämlich einmal ReadLine und einmal ReadKey. Der letzte Befehl, der auf die Eingabe einer beliebigen Taste wartet, hat mit dem Programm selbst nichts zu tun. Er ist bei einer Console-Anwendung nützlich; wenn er fehlt, wird das Programm beendet, ohne dass Sie die letzte Ausgabe sehen oder gar lesen können.

Fehlersuche mit Debugger[Bearbeiten]

Dank der guten Vorarbeit (und der wenigen Arbeit, die erledigt wird) enthält unser Programm keine Fehler. Aber für den Fall der Fälle können wir es untersuchen. Sorgen Sie also dafür, dass das Programm nicht einfach durchläuft

  • Setzen Sie einen Haltepunkt (Breakpoint), indem Sie in eine bestimmte Zeile gehen, z.B. in die Zeile mit ReadLine:
    • Klicken Sie in dieser Zeile in den Fensterrahmen links von der Zeilennummer.
    • Oder klicken Sie in dieser Zeile an eine beliebige Stelle und drücken dann F7.
  • Starten Sie dann wieder Kompilieren und Ausführen (wie oben).

Das Programm wird zunächst mit der Console beginnen und dann in die IDE zurückspringen und an der betreffenden Stelle anhalten. Der Arbeitsablauf kann mit den Befehlen im Menü Debuggen bzw. mit F10 und F11 fortgesetzt werden. Gehen Sie dabei wie folgt vor:

  • Im Fenster Lokale Variablen sehen Sie, dass für input noch kein Wert vorgegeben ist.
  • Drücken Sie einmal F11. Das Programm geht nicht weiter, weil es auf eine Eingabe wartet.
  • Wechseln Sie über die Taskleiste zum Programm, schreiben den gewünschten Eingabetext und drücken Return.
  • Das Programm springt automatisch in die IDE zurück und steht jetzt auf der nächsten Zeile.
  • Im Fenster Lokale Variablen sehen Sie jetzt den von Ihnen eingegebenen Wert.

Mit F6 kann der Programmablauf bis zum nächsten Haltepunkt fortgesetzt werden. Bei uns kommt kein neuer Haltepunkt, aber das Programm wartet in der Console auf eine beliebige Taste. Wechseln Sie also dorthin und geben es frei.

Bei späteren Programmen sollten Sie das Debuggen intensiv mit Haltepunkten, den Funktionstasten und den Variablen ausprobieren.

Versionen[Bearbeiten]

Die verschiedenen Versionen von SharpDevelop arbeiten mit den .NET-Versionen so zusammen:

  • Zu #D 1.x gehört .NET 1.1.
  • Zu #D 2.x gehört .NET 2.0.
  • Zu #D 3.x gehört .NET 3.5.
  • Zu #D 4.x gehört .NET 4.0.

In allen neueren Versionen kann über Projekt > Projektoptionen unter    Kompilieren    auch eine andere (frühere) .NET-Version festgelegt werden.

Zusammenfassung[Bearbeiten]

Mit SharpDevelop steht eine vollwertige IDE zur Verfügung:

  • Es können verschiedene Programmiersprachen verarbeitet werden.
  • Der Code-Editor berücksichtigt die Anforderungen von Programmierern.
  • Der passende .NET-Compiler und ein Debugger sind integriert.

Damit können wir umfangreiche .NET-Anwendungen erstellen.