Eine Einführung in die .NET Grundlagen und C#
Vaios Lois - .NET GrundlagenAikaterini Vassiliou - C#
Überblick
Einführung .NET Grundlagen
1. Was ist .NET?2. Plattformen3. Geschichte und Versionen4. Installation5. Zwischensprache6. Laufzeitumgebung7. Programmiersprachen8. Objektorientierung9. .NET-Klassenbibliothek (FCL)10. Softwarekomponentenkonzept
1.Was ist .NET?
Definition:
• .NET ist eine betriebssystemunabhängige Softwareentwicklungsplattform der Firma Microsoft
Ziele von .NET:
• Primäres Ziel: Eine Plattform für die Entwicklung von Software jederArt
• Unterschiede zwischen verschiedenen Programmiersprachen in derAnwendungsentwicklung zu beseitigen.
1.Was ist .NET?
Technische Merkmale des .NET Frameworks
• Parallelbetrieb verschiedener .NET Framework-Versionen
• Durchgängige Objektorientierung
• wiederverwendbare Softwarekomponenten
• Plattformunabhängigkeit durch Zwischensprache mit Just-in-Time Compiler
• umfangreiche Klassenbibliothek mit mehr als 9.000 Klassen, einheitlichfür alle .NET-fähigen Programmiersprachen
• XML-basierte Konfiguration von Anwendungen
2.Plattformen
.NET auch auf anderen Betriebssystemen außer Windows?JA. Dank der Firma Novell.
Novell Mono
• Open Source Projekt wurde im Jahre 2001 von Miguel de Icaza ins Leben gerufen.
• Ernst zu nehmende .NET Implementierung für Unix, Linux und Mac OS.
• Novell liefert derzeit vorgefertigte Mono-Distributionenfür Suse-Linux, Redhat-Linux, Fedora-Linux, Novell-Linux.
3.Geschichte und Versionen
• Das .NET Framework ist entstanden aus Bemühungen von Microsoft,eine einheitliche Laufzeitumgebung für das Component Object Model(COM) zuentwickeln.
.NET-Version Erscheinungstermin Zugehörige Visual Studio-Version
1.0 5.1.2002 Visual Studio .NET 2002
1.1 1.4.2003 Visual Studio .NET 2003
2.0 7.11.2005 Visual Studio 2005/2008
3.0 19.11.2006 Visual Studio 2005/2008
3.5 19.11.2007 Visual Studio 2008
4.Installation
Was benötige ich?
• .NET Framework Redistributable 3.5• Windows Software Development Kit (WinSDK)• .NET Framework Software Development Kit (.NET SDK)• Visual Studio 2008
Allgemein gilt:
• Ist das .NET nicht schon aktuell auf dem Betriebssystemvorhanden, kann man sich die aktuelle Version von derMicrosoft Homepage runterladen.
5.Zwischensprache
5.Zwischensprache
.method public static void main() cil managed{
.entrypoint
.custom instancevoid[mscorlib]System.STAThreadAttribute::.ctor()=(01 00 00 00)//Code size 11(0xb).maxstack 8IL_0000: ldstr „Hello World aus der Anwendung 1!“IL_0005: call void [mscorlib]System.Console::WriteLine(string)IL_000a:ret
}//end of method Anwendung1::main
6.Laufzeitumgebung
• Die Laufzeitumgebung, Common Language Runtime(CLR) beinhaltetneben den Just - in -Time-Compiler noch folgendes:
• Eine automatische Speicherverwaltung durch einen Garbage Collector
• Ein System für eine Ausnahmebehandlung (Exception Handling)
• Ein Sicherheitssystem, das die Anwender vor bösartigen Code schützen kann,
• Die Kompatibilität mit Nicht-.NET-Anwendungen
6.Laufzeitumgebung
7.Programmiersprachen
• Insgesamt existieren mittlerweile über 40 verschiedene Programmiersprachen
Sprachen von Microsoft :
• Visual Basic (Visual Basic .NET)
• C# (CSharp)
• J#(JSharp, ein Java-Derivat)
• JScript .NET (Ein Derivat von Javascript)
• C++/CLI
• IronPython
8.Objektorientierung
• Das .NET Framework besteht nur aus Objekten. Auch elementare Werte wie Zahlen sind Objekte.
• .NET unterstützt Einfachvererbung. Bei keiner definierten Vererbung wird von der Klasse System.Object abgeleitet.
• Schnittstellen können nur im Rahmen einer Klasse definiert werden. Mehrfachvererbung bei Schnittstellen möglich
• Verwendung von Generischen Klassen
• Partielle Klassen
8.Objektorientierung• Aus Leistungsgründen gibt es intern dennoch eine unterschiedliche Behandlungvon Referenztypen und Wertetypen.
• Delegaten sind typsichere Zeiger auf Funktionen.
8.Objektorientierung
• Wertetypen erben von System.ValueType
2246 2303
5684
87149326
0100020003000400050006000700080009000
10000
NET 1.0 NET 1.1 NET 2.0 NET 3.0 NET 3.5
NET 1.0 NET 1.1 NET 2.0 NET 3.0 NET 3.5
9..NET Klassenbibliothek (FCL)
• Die .NET-Klassenbibliothek kann von allen .NET-Sprachen genutzt werden.
• Die FCL Klassen sind in 312 Namensräume eingeteilt.
10.Softwarekomponentenkonzept
• DLLs und EXEs heißen im .NET Framework Assemblies.
• Eine wiederverwendbare Softwarekomponente ist sowohl ein EXE- als auch eine DLL-Assembly.
• Ein EXE Assembly ist eine startbare Anwendung.
• Ein DLL Assembly kann nicht einzel gestartet werden. Ihr Zweck ist die Verwendung im Rahmen einer anderen Anwendung.
10.Softwarekomponentenkonzept
Ein-Datei-Assembly Mehr-Dateien-Assembly
Überblick1. Was ist C#(C Sharp)2. Hello World 3. Datentypen4. Typkonvertierung5. Wertelose Wertetypen6. Operatoren/Operatorüberladung7. Klassen8. Felder9. Eigenschaften (Property-Attribute)10. Methoden11. Konstruktoren und Destruktoren12. Schnittstellen (Interfaces)13. Namensräume (Namespaces)14. Schleifen15. Verzweigungen16. Funktionszeiger(Delegates)17. Fehlerbehandlung18. Kommentare19. Arrays/Indexer
Was ist C#
Programmiersprache, die mit .Net Framework neu entwickelt wurde
Konzeptionell wurde C# vor allem von C++ und Java beeinflusst
C# ist eine rein objektorientierte Sprache
C# ist das Ergebnis eines Projekts bei Microsoft
Ursprünglich sollte die Sprache "Cool" heißen
Aktuelle Version: C#3.0
using System; namespace HelloWorld {
class Hello {
static void Main(){
Console.WriteLine("Hello World!"); }
} }
Hello World in C#
Datentypen in C#
C# Art
byte Ganzzahl 1 Byte
bool Ganzzahl Boolean
short Ganzzahl 2 Bytes
int Ganzzahl 4 Bytes
long Ganzzahl 8 Bytes
float Ganzzahl 4 Bytes
double Ganzzahl 8 Bytes
decimal Zahl 12 Bytes
char Zeichen 1 Byte oder 2 Bytes
string Zeichenkette
dateTime Datum/Uhrzeit
Typkonvertierung in C#
Typkonvertierung bezeichnet die Umwandlung von einem Datentypin einen anderen, z.B. Umwandeln einer Zahl in eine Zeichenkette
Typkonvertierung sind in der .NET-Klassenbibliothek hinterlegt,insbesondere in der Klasse System.Convert
string text1 = zahl.ToString();string text2 = Convert.ToString(zahl);
Die Konvertierung von Zahl zu Text ist nur möglich über die ToString()-Methode oder über die Klasse System.Convert
Wertelose Wertetypen in C# C# unterstützt Nullable Value Types bereits seit Version 2005
Ab .NET 2.0 existiert ein Hilfskonstrukt um auch Wertetypenden Wert null zuweisen zu können
In .NET ist ein auf null setzbarer Wertetyp eine generischeStruktur(System.Nullable)
Besteht aus dem Wert(value) und einem Hilfs-Flag HasValue(boolean)
int a = 1;int ? b =2;
b=null a=null
Operatoren in C#
+, -, * , / , % , ~ ,++ , --, n/a , / Mathematik
= , +=, -=, *=, /=, %= /=, <<=, >>=, &= ,^=, |=
Zuweisung
<, <= , > ,>= , = ,!= , == , != , + , ==
Vergleich
&&, | | , ! , & , ^ , | , << , >> Logische OperatorenBit-Operatoren
Operatoren überladen
C#-Operator Bedeutung
+, -, !, ~, ++, --, true, false Unäre Operatoren
+, -, *, /, %, &, |, ^, <<, >> Binäre Operatoren
==, !=, <, >, <=, >= Relationale Operatoren
Operatoren, die überladen werden können
Operatoren, die nicht überladen werden können−Spezielle Operatoren
• sizeof• new• is• typeof
Klassen in C# Enthalten
Felder, Methoden, Properties, Delegaten, Indexer
private Mitglied kann nur innerhalb der Klasse genutztwerden
protected Mitglied kann innerhalb der Klasse und inabgeleiteten Klassen genutzt werden
internal Mitglied kann in allen Klassen innerhalb derAssembly genutzt werden
public Mitglied kann in allen Klassen auch inreferenzierenden Assemblies genutzt werden
Klassen können abstract oder sealed sein
Erlauben Einfachvererbung
Können von beliebig vielen Interfaces erben
Klassendefinition in C# Klassen werden in C# durch das Schlüsselwort class gebildet
public class Person{
public string name;
public Person() {
name = "unknown"; } public void SetName(string newName) {
name = newName; }
} Person person1 = new Person(); System. Console.WriteLine(person1.name);
Felder in C#
Attribute werden in C# als Felder oder eng.(Fields) bezeichnet
Felder ohne Codehinterlegung werden durch einfache variablen
deklariert
Felder ermöglichen Klassen und Strukturen das Kapseln von Daten
Felder können public, private, internal oder protected sein
[Sichtbarkeitsmodifizierer] <Typ> <Variable>;
public string PersonalausweisNr;
Property-Attribute in C#
Komposition aus Feldern und Methoden
Tut nichts anderes als private Feld Attribut zu lesen und zu beschreiben
private long flugstunden;
public long Flugstunden{
get { return flungstungen;}set { flungstunden=value;}
}
Methoden in C#
Methoden werden innerhalb einer Klasse deklariert , indem die Zugriffsebene, der Rückgabewert, der Name der Methode und die Methodenparameter angegeben werden
Variable Parameterlisten können mit dem Schlüsselwort params erzeugt werden
Überschreiben−Deklaration als virtual in der Basisklasse−Deklaration als override in der abgeleiteten Klasse
[Sichtbarkeitsmodifizierer] <Typ> <Methodenname>( [ <Typ> <Variable>, …] )
Methodenparameter in C#
Für die Übergaberichtung gibt es in C# für den Call by Value keineSchlüsselwort und für den Call by Reference-Fall zwei Wörter
Der Zusatz ref vor einem Parameter bedeutet, dass der Wert von außenhereingegeben wird und innerhalb der Methode verändert werden darf
Der Zusatz out vor einen Parameter bedeutet, dass der Aufrufer nichtinitialisierten Speicherplatz hereingibt. Der Wert muss zwangsläufigvon der Methode selbst gesetzt werden und wird dann dem Aufrufergeliefert
class OutExample{
static void Method(out int i){
i = 44;}static void Main(){
int value;Method(out value);
}}
class RefExample{
static void Method(ref int i){
i = 44;}
static void Main(){
int value=0;Method(ref value);
}}
Methodenparameter in C#
Konstruktoren und Destruktoren
Ein Konstruktor ist eine Methode, die beim Instanziieren aufgerufen wird
Konstruktoren besteht aus ~ gefolgt von Klassennamen und haben keinenRückgabetyp
Echte Destruktoren, die beim Löschen eines Objektes aufgerufen werden,kennt das .NET Framework hingegen nicht
Der Aufruf des Destruktors ist im .NET Framework nicht deterministisch
Man spricht oft von Finalizern statt von Destruktoren
Vererbung in C#
C# unterstützt die Einfachvererbung, nicht aber die Mehrfachvererbung
Die Implementierungsvererbung wird angezeigt durch ein Doppelpunkt nach dem Klassennamen
Der Doppelpunkt dient auch der Anzeige von Schnittstellenvererbung
Nach dem Doppelpunkt kann auf this (aktuelle Klasse) und base (Basisklasse) Bezug genommen werden
Vererbung in C#
public class Fahrzeug{string farbe;public Fahrzeug(string farbe){
this.farbe=farbe;}
}
public class Auto : Fahrzeug {string marke;public Auto(string farbe, string marke) : base(farbe) {
this.marke=marke;}
}
Schleifen in C#
C# unterscheidet die Schleifentypen
Bedingte Schleifen Zählschleife Mengenschleife
// Syntax: foreach-Schleife
foreach(Datentyp Bezeichner in Array-Bezeichner) { …}
int[] intArr = {2,4,6,8};foreach(int tempElement in intArr){
Console.WriteLine(tempElement);}
Verzweigungen in C#
if-Anweisung switch-Anweisung
Die if-Anweisung in C# erfordert, dass die Bedingung innerhalb der if-Anweisung für einen Ausdruck vom Typ bool ausgewertet wird
C# ermöglicht des Weiteren die Verwendung der switch-Anweisung mit Zeichenfolgenvariablen:
switch (htmlTag) { case "P":
Console.WriteLine("Paragraph start"); break;
}
Schnittstellen in C# Eine Klasse kann optional eine oder mehrere Schnittstellen
implementieren
Eine Schnittstelle kann auch von mehreren anderen Schnittstellen erben
Schnittstellen werden mit dem Schlüsselwort interface erzeugt. Bennenung meist beginnend mit I
interface IPilot{
int FlugZuweisen(int Flug);}
public class Pilot : IPilotpublic int FlugZuweisen(int Flug) {
return 0;}
Namespaces in C#
Deklaration eines Namensraum dient dazu, eine Klasse einen Namensraumzuzuordnen
Deklaration erfolgt durch das Konstrukt namespace
Importieren von Namensräumen hat das Ziel, einen Klassennamen mitverkürztem oder ganz ohne Namensraum zu verwenden
Importieren von Namensräumen erfolgt mit dem Schlüsselwort using
using <Namespace>;
namespace <Klassenname>{}
Delegates in C#
Delegaten sind typsichere Zeiger auf Funktionen
Entsprechen den Funktionszeiger aus der Sprache C++
Ein Delegat kann auf mehrere Funktionen zeigen
Funktion Syntax
Deklaration eines Funktionszeigertyps public delegate voidDel(string message)
Methodendeklaration public void DelegateMethod(string message)
Erstellung eines Zeigers auf die Funktion
Del handler = DelegateMethod
Aufruf des Delegates handler(„Hello Word“)
Fehlerbehandlung in C#
C # unterstützt das Konstrukt try catch finally um Laufzeitfehler abzufangen
Ein catch (Exception ex) fängt alle Fehler ab, weil System. Exception die Oberklasse aller Ausnahmen ist
Der finally-Block gibt alle Ressourcen frei, die im try-Block reserviert wurden, und führt den Code aus, der trotz Eintreten einer Ausnahme ausgeführt werden soll
try{}catch (FirstException e){ }catch(SecondException e){}finally{}
Fehlerbehandlung in C#
Kommentare in C#
C # unterstützt drei Arten von Kommentaren
Zeilenkommentare, bei denen jede Zeile mit einem // eingeleitet wird
Blockkommentare, bei denen der Codeblock in /*….*/ eingerahmt wird
XML-Kommentare, bei denen jede Zeile mit /// beginnt
Arrays in C#
Ein Array kann eindimensional, zweidimensional oder verzweigt sein
Der Index eines Arrays mit n Elementen beginnt bei 0 und endet bei n-1
Arraytypen sind Verweistypen und Instanzen der Klasse System. Array
Sind dynamisch bezüglich der Größe
Die Anzahl der Dimension muss bei der Deklaration festgelegt werden
int[] array1 = new int[3];int[] array2 = new int[3] { 1, 3, 5}; array1[0]=20;int[,] array = new int[4, 2]; int[][] myArray=new int[4][];
Indexer in C# Ermöglichen das Indizieren von Instanzen einer Klasse oder Struktur
auf dieselbe Weise wie Arrays , sind mit Eigenschaften vergleichbar
Um einen Indexer für eine Klasse oder eine Struktur zu deklarieren, verwenden man das this Schlüsselwort
public int this[int index] // Deklaration
get{
return arr[index];}set{
arr[index] = value;}
public class Person{
Fragen ?
Vielen Dank !