- Software and Systems Engineering

Werbung
Technische Universität München
Einführung in C#
Maximilian Irlbeck
Lehrstuhl für Software &
Systems Engineering
22. Oktober 2010
Technische Universität München
Inhalt

1. Grundlagen

Historie

Allgemeine Infos zu C#

2. Sprachdesign

3. Sprachfeatures/-syntax
22.10.2010
Maximilian Irlbeck: Einführung in C#
2
Technische Universität München
Historie I: C# ist cool.

1990‘s
Erste Klassen für „Next Generation Windows
Services“ werden in SMC verfasst
(Simple Managed C , „smack“)

Hejlsberg ’99
Start der Entwicklung an Cool für .NET
(C-like Object Oriented Language)

Juli 2000, PDC
Erste Öffentliche Präsentation des .NET
Frameworks, Umbenennung von Cool in C#
(sprich: C Sharp)
Anders Hejlsberg
Technical Fellow und
Chief Architect, C#
Vater von TurboPascal, Delphi
22.10.2010
Maximilian Irlbeck: Einführung in C#
3
Technische Universität München
Historie II: C# 1.0 – 4.0

C# 1.0 (01/2002)
wird zusammen mit .NET 1.0 released

C# 1.2 (04/2003)

C# 2.0 (11/2005)
Generics, Partielle Klassen, Statische Klassen,
Anonyme Delegaten, Nullable Types

C# 3.0 (11/2007)
LinQ, Anonyme Typen, Lambda Ausdrücke,
Extension methods, Object/Collection Initializer

C# 4.0 (04/2010)
Dynamic member lookup, Co-/Contravariance,
Named/Optional parameters
22.10.2010
Maximilian Irlbeck: Einführung in C#
4
Technische Universität München
Allgemeine Infos zu C#


C# ist standardisiert unter ISO/IEC 23270, ECMA 334
C# wurde beeinflusst von







Java
C/C++
Pascal/Delphi
Haskell
Modula-3
Visual Basic
C# kann in folgenden IDEs benutzt werden:






Microsoft Visual Studio 2003, 2005, 2008, 2010
SharpDevelop
MonoDevelop
XNA Game Studio
C#-Builder
Baltie
22.10.2010
Maximilian Irlbeck: Einführung in C#
5
Technische Universität München
Allgemeine Infos zu C#
 Der Ursprung des Namens C♯:
Symbol für den in der Musik durch ein Kreuz (♯) um einen
Halbton erhöhten Ton C, das Cis. Englisch: C sharp.
 C# Dialekte/Derivate:








Spec#
Sing#
Cω
eXtensible C# (XC#)
Multiprocessor C# (MC#)
Metaphor
Polyphonic C#
Vala
22.10.2010
Maximilian Irlbeck: Einführung in C#
6
Technische Universität München
Inhalt

1. Grundlagen

2. Sprachdesign


Paradigmen in C#

Typisierung

Ordnungsstrukturen
3. Sprachfeatures/-syntax
22.10.2010
Maximilian Irlbeck: Einführung in C#
7
Technische Universität München
Paradigmen in C#
C# unterstützt folgende Programmierparadigmen:




Strukturierte Programmierung
Imperative Programmierung
Funktionale Programmierung
Komponentenorientierte Programmierung
 Objektorientierte Programmierung
 Ereignisbasierte Programmierung
 Generische Programmierung
 Aspektorientierte Programmierung
22.10.2010
Maximilian Irlbeck: Einführung in C#
8
Technische Universität München
Typisierung

C# ist eine streng typisierte, objektorientierte Sprache

Zwei Arten von Typen:
 Referenztypen (class, interface)
 Werttypen (struct, enum, Basistypen)

Jeder Typ erbt automatisch von object,
d.h. alle Typen bieten die Methoden von object an wie ToString()

Für Referenztypen existiert ein Sondertyp:
null – die leere Referenz
22.10.2010
Maximilian Irlbeck: Einführung in C#
9
Technische Universität München
Typisierung II: Basistypen
Datentyp
Beschreibung
bool
Boolesche Ausdrücke: true, false
sbyte/byte,
short/ushort,
int/uint,
long/ulong
Vorzeichenbehaftete/vorzeichenlose
Ganzzahlen
float, double
Fließkommazahlen
decimal
hochpräziser, dezimaler Datentyp
128 bit
char
Einzelnes Unicode Zeichen
16 bit
string
Zeichenketten: „Hello World“
Variabel
enum
Aufzählungstyp
enum EnumName {
Option1, Option2,…,OptionN }
Variabel
object
Wurzel aller anderen Typen
22.10.2010
Maximilian Irlbeck: Einführung in C#
Größe
8 bit
16 bit
32 bit
64 bit
32 bit, 64 bit
10
Technische Universität München
Ordnungsstrukturen I: Basisstrukturen
Basisstrukturen:
enum, delegate , interface, struct, class
enum
Aufzählungstyp, Beispiele: Tastaturkeys, Wochentage,…
delegate
Definiert eine bestimmte Methodensignatur
interface
Definiert eine Menge von Signaturen
class, struct
Container für Methoden, Felder, Properties,
Events, Delegates, Klassen, Structs
class
unterstützt im Gegensatz zu struct auch Vererbung
22.10.2010
Maximilian Irlbeck: Einführung in C#
11
Technische Universität München
Ordnungsstrukturen II: Namespaces
Alle Basisstrukturen werden mit sogenannten Namespaces geordnet.
Namespace
bildet eine hierarchische Ordnungsstruktur, auf die mit dem Scope
Operator („.“) zugegriffen werden kann.
Beispiel:
System.DateTime
System.Xml.XmlDocument
System.Xml.Serialization.XmlSerializer
= Namespace
22.10.2010
Maximilian Irlbeck: Einführung in C#
12
Technische Universität München
Inhalt

1. Grundlagen

2. Sprachdesign

3. Sprachfeatures/-syntax

Klassen, Objekte, Interfaces, Methoden, Scopes

Sichtbarkeit, Schleifen, Generics

Exceptions, Operatoren, Arrays

Vergleich mit anderen Sprachen
22.10.2010
Maximilian Irlbeck: Einführung in C#
13
Technische Universität München
Hello World!
Namespace
benutzen
using System;
Namespace
namespace HelloWorld
Klasse
{
class HelloWorldClass
{
Methode
String Array
[STAThread]
static void Main(string[] args)
Kommentar
{
// Show yourself to the world outside
Console.WriteLine("Hello World!");
}
Statischer
}
Methodenaufruf
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
14
Technische Universität München
Klassen
public class Foo : ICloneable, FooBase
{
private int myInt = 0;
public int MyInt
{
get { return myInt; }
set { myInt = value; }
}
internal Foo()
{
…
}
Vererbungsliste
Feld
Property
Konstruktor
protected void DoSomething(int times)
{
…
}
Methode
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
15
Technische Universität München
Objekte
Foo f = new Foo();
f.MyInt = 1;
Konstruktoraufruf
Propertyzuweisung
Foo g = new Foo();
g.DoSomething(3);
Konstruktoraufruf
f.MyInt = g.MyInt;
Propertyzuweisung
f.myInt = 0;
22.10.2010
Methodenaufruf
Feldzuweisung
Maximilian Irlbeck: Einführung in C#
16
Technische Universität München
Interfaces
public interface ISomeInterface
{
int MyProperty { get; set;}
string SomeMethod();
}
public class Implementer : ISomeInterface
{
public int MyProperty
{
get { … }
set { … }
}
public string SomeMethod()
{
…
}
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
17
Technische Universität München
Methoden
Allgemeine Struktur:
<Sichtbarkeit> <Rückgabetyp> <Name>(<Parameterliste>)
{
// Implementierung
}
Beispiel:
public int Max(int first, int second)
{
if (first >= second)
{
return first;
}
else
{
return second;
}
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
18
Technische Universität München
Scopes
public class Foo
{
private int myInt = 0;
public void DoSomething()
{
int localVar = 1;
if(myInt == 0)
{
string s = „Hello World“;
}
}
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
myInt
localVar
s
19
Technische Universität München
Sichtbarkeitsstufen
Stufe
Sichtbarkeit
public
Überall
internal
innerhalb der gleichen Assembly
protected
innerhalb der erbenden Klasse
internal protected
innerhalb der erbenden Klassen in der gleichen Assembly
private
nur innerhalb der Klasse
22.10.2010
Maximilian Irlbeck: Einführung in C#
20
Technische Universität München
Verzweigungen
if (<Bedingung1>)
{
// some Code here
}
else if (<Bedingung2>)
{
// other code here
}
else
{
// the rest here
}
22.10.2010
switch (<Variable>)
{
case Case1:
/*Code
...
case CaseN-1: /*Code
case CaseN:
/*Code
default:
/*Code
}
Maximilian Irlbeck: Einführung in C#
here*/ break;
here*/ break;
here*/ break;
here*/ break;
21
Technische Universität München
Schleifen
while (<Bedingung1>)
{
// looped Code here
}
for (<Init>;<Condition>;<Step>)
{
// looped code here
}
do
{
foreach (ElementTyp name in Auflistung)
{
// looped code here
}
// looped code here
} while (<Bedingung2>);
Zusätzliche Schlüsselwörter:
- break
gesamte Schleife verlassen
- continue
Schleifenlauf abbrechen
22.10.2010
Maximilian Irlbeck: Einführung in C#
22
Technische Universität München
Operatoren
 Vergleichsoperatoren:
==
prüft auf Gleichheit; nicht verwechseln
mit Zuweisung (z.B. a = 3)
!=
prüft auf Ungleichheit
<, >, <=,
prüft auf Erfüllung der entsprechenden Relationen
>=
 Logische Verknüpfungen
!
NOT (Negation, unär)
&&
bedingtes AND
||
bedingtes OR
 Typprüfungen und Casts
is, typeof
Typkompatibilität, Typexploration
as
Umwandlung (geprüft)
(<Typ>)
Umwandlung (ungeprüft, Ausnahme bei Fehler)
22.10.2010
Maximilian Irlbeck: Einführung in C#
23
Technische Universität München
Operatoren II
 Arithmetische Operatoren:
+, -, *, /
Grundrechenarten
++, -Inkrement, Dekrement
%
Modulo
 Zugriffs-/Zuweisungsoperatoren
[<Wert>]
Zugriff auf indexierte Datenstruktur
=
Zuweisung
+=, -=, *=,…
kombinierte Zuweisung
 Bitoperationen
<<, >>
&, |, !, ^
Bitshifting
Logisches AND, OR, NOT, XOR
Sehr viele Operatoren können in C# überladen werden.
22.10.2010
Maximilian Irlbeck: Einführung in C#
24
Technische Universität München
Exceptions & Exceptionhandling
try
{
throw new Exception("Error text");
}
catch
{
//
}
catch
{
//
}
(NullReferenceException)
Catch only NullReference Exceptions
(Exception ex)
Catch all exceptions
22.10.2010
Maximilian Irlbeck: Einführung in C#
25
Technische Universität München
Generics

Generische Klasse:
class GenericClass<T> where T : IComparable
{
T member;
…
}

Generische Methode:
U GenericMethod<T,U>(T input) where T : new()
{
T tVal = new T();
…
}
22.10.2010
Maximilian Irlbeck: Einführung in C#
26
Technische Universität München
Arrays
string[] myStrings = new string[10];
null
null
null
null
null
null
null
null
null
null
0
1
2
3
4
5
6
7
8
9
myStrings[2] = "Hi";
null
null
"Hi"
null
null
null
null
null
null
null
0
1
2
3
4
5
6
7
8
9
myStrings[7] = myStrings[2];
null
null
"Hi"
null
null
null
null
"Hi"
null
null
0
1
2
3
4
5
6
7
8
9
22.10.2010
Maximilian Irlbeck: Einführung in C#
27
Technische Universität München
Unterschiede zu C/C++

Pointer nur in spezieller unsafe Umgebung in C#






Garbage Collection, kein Speichermanagement nötig in C#
Keine mehrfache Klassenvererbung in C#
throw nur für Exceptions möglich in C#
Events in C#, kein einheitliches Äquivalent in C++
Präprozessorbefehle in C++ sehr viel mächtiger
…
22.10.2010
Maximilian Irlbeck: Einführung in C#
28
Technische Universität München
Unterschiede zu Java








Hardwarenahe Programmierung in C# möglich, in Java nicht
(Pointer und Pointerarithmetik)
Properties in C#, in Java mit Methoden à la GetX() und SetX() gelöst
Kein throws in C# wie in Java
Operator Überladung in C# möglich, in Java nicht
Java: new String(„Hello“) == new String(„Hello“) -> false
C#:
new String(„Hello“) == new String(„Hello“)->true
Optionale/Default Methoden Parameter in C#
Generics in C# mit Constraints einschränkbar
…
22.10.2010
Maximilian Irlbeck: Einführung in C#
29
Technische Universität München
Get Started!
https://prod.maniac.tum.de/ManiacGUI
Vielen Dank.
Herunterladen