C# - wi1.uni- · PDF file5 Designziele Betriebssystem über dem Betriebssystem hoher Grad an Sicherheit höchst mögliches Maß an Kompatibilität gemeinsame Plattform für

Embed Size (px)

Citation preview

  • C#im Rahmen des Seminars - Programmiersprachen

    Markus Nestvogel

  • 2

    1. Einfhrung2. Microsoft .NET3. C#

    Gliederung

  • 3

    objektorientierte Programmiersprachefr Microsoft .NET entwickeltKonkurrenz zu Javawird in Zwischensprache (IL) bersetztbentigt Runtime

    1 Einfhrung

  • 4

    Vision von MicrosoftVerknpfung von Informationen, Menschen, Systeme und GerteVerteilte Applikationen

    .NET Frameworktechnische Umsetzung

    2 .NET

  • 5

    DesignzieleBetriebssystem ber dem Betriebssystemhoher Grad an Sicherheithchst mgliches Ma an Kompatibilittgemeinsame Plattform fr unterschiedliche Sprachen

    C#, C++ mit verwalteten Erweiterungen, J#, Haskell....

    groe Basisklassenbibliothekschnelle Anwendungsentwicklung (Rapid Application Development, RAD)standardisierte Benutzeroberflchen...

    2.1 .NET-Framework

  • 6

    Laufzeitumgebung, unter der .NET-Programme ausgefhrt werdenvirtuelle Maschine mit eigenem Befehlssatz (IL)

    HauptbereicheAusfhrung der ProgrammeTypverwaltung (CTS)Freispeicherverwaltung mit Garbage CollectionProzessraumverwaltung in Application Domains

    2.2 Common Language Runtime

  • 7

    bersetzung und Ausfhrung

    classloader JIT - Compiler

    nativer MaschinencodeAusfhrung

    .NET

    Bas

    iskl

    asse

    nbib

    lioth

    ekIL

    .NET Sprachen Compiler

    Quelltext

    CLR

  • 8

    Zielcode aller .NET Sprachcompilerhnlich Java Bytecode

    aber: Typinformation ist nicht Bestandteil von einer Instruktion

    IL-Code wird vor Ausfhrung grundstzlich durch einen Just In Time Compiler in nativen Maschinencode bersetzt

    2.3 Intermediate Language

    .locals init ([0] int32a, [1] int32 b,[2] int32 c)

    IL_0000: ldc.i4 0x925IL_0005: stloc.0IL_0006: ldc.i4.2IL_0007: stloc.1IL_0008: ldloc.0IL_0009: ldloc.1IL_000a: addIL_000b: stloc.2

    int a = 2341;int b = 2;int c = a+b;

    0 sipush 23413 istore_14 iconst_25 istore_26 iload_17 iload_28 iadd9 istore_310 return

    Microsoft-IL Java-Bytecode

  • 9

    Sobald ein Modul in IL bersetzt wird gehrt es zu einem Assembly

    Codeabschnitt, RessourcenabschnittManifest mit Metadaten ber die enthaltenen Typen

    private Assemblies stehen im (Unter-)Verzeichnis der Anwendung ffentliche Assemblies sind im GAC installiert

    einmalig kompiliertmehrere Versionen knnen gleichzeitig installiert seinVersionsberprfung durch die CLR verhindert das falsche Assemblies benutzt werdenEnde der .dll-Hlle

    Assemblies

  • 10

    als Common Type System in die CLR integrierteinheitlich fr alle Sprachenalles ist ein Objekt (2004.ToString();)

    alle Typen werden von System.Object abgeleitet

    es existieren genau zwei Arten von TypenWerttypenVerweistypen

    2.4 Typsystem

  • 11

    CTS

    .NETDatentypen

    BenutzerdefinierteDatentypen

    Datentyp(System.Object)

    Werttypen Verweistypen

    Int16

    Char

    Decimal

    ...

    Enums

    Strukturen

    String

    Boxing-Klassen

    .NET-Delegaten

    .

    Delegaten

    Interfaces

    Klassen

  • 12

    Werttypenechte Werte (int, double, decimal, ...)werden auf Stack gespeichertmssen initialisiert werdeneigene Werttypen mglich (Strukturen)

    Verweistypenobjektorientierte Zeigerwerden im Heap gespeichert

  • 13

    Boxing vs. Unboxing

    123

    123

    123

    System.Int32

    i

    o

    j

    // implizites Boxingstring s = 7.GetType().ToString();// explizites Boxingint i = 123;object 0 = i;int j = (int) o

  • 14

    wird periodisch gestartetmarkiert alle erreichbaren Objekte entfernt alle Unmarkierten

    2.5 Garbage Collection

    Objekt A

    Objekt B

    Objekt C

    Objekt D

    Objekt E

    Objekt F

    Objekt G

    eva

    lua

    tion

    Sta

    ck

    Objekt A

    Objekt C

    Objekt E

    Objekt F

    eva

    lua

    tion

    Sta

    ck

    Heap Heap

  • 15

    Anwendungen teilen sich einen ProzessraumCode muss typsicher sein (verwalteter Code)unsicherer Code luft weiterhin in isolierten Prozessen

    2.6 Application Domains

    Prozess

    Computer

    Prozess

    Unverwaltete Umgebung

    Objekt Objekt

    ObjektObjekt

    Anwendung

    Objekt Objekt

    ObjektObjekt

    Anwendung

    Objekt Objekt

    ObjektObjekt

    Anwendung

    Application Domain Application Domain

    Verwaltete Umgebung

    Freispeicherverwaltung, Typsicherheit auf Basis von Laufzeittypen, Codesicherheit, Lizensierung

    Direkter Speicherzugriff mglich, COM Komponenten,

    Bibliotheken mit API-Routinen

  • 16

    Die .NET-Sprachelaut MS: Symbiose aus Visual Basic und C++erinnert stark an Java

    bentigt Runtime zur AusfhrungWerte mssen vor Verwendung initialisiert werden

    Aufbaueigene Typen werden in Klassen implementiert

    class, abstract class, interface, struct,...

    3 C#

  • 17

    Namensrumehnlich Java-Packageskeine Namenskollisionen mit externen Symbolenbeliebig viele Unternamensrume erlaubteinzubinden durch using Namensraum; Klausel

    einzelne Klasse mssen mit einem Alias angegeben werden (using myClass = new Namesraum.Klasse;)

    3.1 C# - Syntax

    namespace NamensRaum{[class-Klassendefinition][struct-Klassendefinition][interface-Schnittstellendeklarationen][enum-Vereinbarungen fr Aufzhlungstypen][delegate-Vereinbarungen fr Methodenzeiger]

    namespace NamensUnterRaum{...}

    }

  • 18

    class-Klassen

    eine Klasse kann nur von einer Basisklasse erbenMehrfachvererbung bei Schnittstellen erlaubt

    Schnittstellen

    [Modifizierer] class MeineKlasse [: {Basisklasse | Schnittstelle[,...]}]{

    ...}

    [Modifizierer] interface IMeineSchnittstelle [: Schnittstelle1 [,...]}]{

    [Methodenprototypen]}

  • 19

    Vererbung

    Vererbung

    Einfachvererbung Mehrfachvererbung

    Implementierungs-Vererbung

    class

    partielle Implemen-tierungsvererbung

    abstract class

    schnittstellen-Vererbunginterface

    nicht polymorpheImplementierung

    new

    polymorpheImplementierung

    virtual,override

  • 20

    StrukturenStrukturen sind immer Werttypen

    werden nur im Stack verwaltet -> bessere Performanceweniger Arbeit fr Garbage Collector

    ideal fr kleine Datenstrukturen mit Wertsemantikermglichen das Erzeugen von primitiven Typennicht ableitbar.NET Framework nutzt diese auch

    int, byte, double, float, ... sind alles structs

    Syntax[Modifizierer] struct MeinStrukturtyp [: Schnittstelle[,...]]{

    ...}

  • 21

    Zugriffsmodifizierer

  • 22

    Beispiel : Hallo Welt!using System;

    class Hallo{

    static void Main(){

    Console.WriteLine("Hallo {0}!","Welt");}

    }

    Ausfhrungmit csc.exe in IL bersetzenHallo.exe starten

  • 23

    Eigenschaftenzweiteilige Methode erlaubt gesicherten schreibenden und lesenden Zugriff auf einen Wert

    Beispiel Zhler:

    Gebrauch: MyClass.Counter++;

    3.2 Neuerungen gegenber Java

    int counter;

    public int Counter{get{

    return counter;}set{

    counter = value;}

    }

  • 24

    foreach - Schleife

    enums

    static int SummiereArray(int[] array){int summe = 0;foreach (int a in array) {

    summe = summe + a;}return summe;

    }

    enum Tageszeit : byte{Morgen = 1,Mittag,Abend,Nacht

    };

    Tageszeit zeit1 = Tageszeit.Abend;Tageszeit zeit2 = (Tageszeit) 3;

  • 25

    Ersatz fr Funktionszeigerobjektorientiert und sicherPlatzhalter fr Callback-Methoden

    Grundlage fr Ereignisbehandlung

    kann mehrere Methoden delegieren

    Delegaten

  • 26

    Beispiel Multicast Delegat:

    using System;

    delegate void EinDelegat(string message);

    class TestDelegat{static void ErsteMethode(string str) {

    Console.WriteLine("Methode 1: {0}",str);}

    static void ZweiteMethode(string str) {Console.WriteLine("Methode 2: {0}",str);

    }

    static void Main(string[] args) {EinDelegat call = new EinDelegat(ErsteMethode);call += new EinDelegat(ZweiteMethode);call ("Beim Delegat angemeldet");call -= new EinDelegat(ZweiteMethode);call ("Noch immer angemeldet");Console.ReadLine();

    }}

  • 27

    ein Objekt macht ein anderes auf interessante Situation aufmerksamEreignisse sind Callback-Funktioneneigener Code wird in unabhngige Komponente eingefgt

    Klick auf einen Windows.Forms Button startet eigene Methode

    Events in C#fester Bestandteil der Sprachebasieren auf Delegaten

    Ereignisbehandlung

  • 28

    Beispiel Ereignisbehandlung:

    using System;

    namespace Ereignisbehandlung {// Delegat fr Ereignispublic delegate void KundeEventHandler();

    public class Kunde {// Ereignisdefinitionpublic event KundeEventHandler Zahlen; public void Bezahlen() {

    //Ereignis auslsenZahlen();

    }}

    public class Kasse {Kunde k; public Kasse (Kunde kunde) {

    k = kunde;// Ereignis abonnierenkunde.Zahlen += new KundeEventHandler(Kunde_Zahlen);

    }// Wenn Ereignis eintritt ausfhrenprivate void Kunde_Zahlen(){

    Console.WriteLine("Kunde hat bezahlt");}

    }

  • 29

    public class Test {static void Main(string[] args) {

    Kunde kunde = new Kunde();Kasse kasse = new Kasse(kunde);kunde.Bezahlen();Console.ReadLine();

    }}

    }

  • 30

    Vielen Dank fr das Interesse

    Fragen zum Vortrag oder der Ausarbeitung jetzt stellen oder an [email protected] schicken

    Guten Appetit!

    Ende