SlideShare ist ein Scribd-Unternehmen logo
Einführung in C#




Präsentation von:
Georg Hinkel
Microsoft Student Partner
KIT Karlsruhe
Georg.hinkel@studentpartners.de
2




                         Agenda
• .NET Architektur, Terminologie
• Syntax C#
  – Kontrollstrukturen, Namenskonventionen
  – Properties
  – Delegates, Events
• Werttypen vs. Referenztypen


                Einführung in .NET und C# - Georg Hinkel
Grober Aufbau der Plattform und Klärung der Begriffe
Architektur & Terminologie
4




                          Architektur
                                Programmiersprache (Standard: Common Language
                                Specification, CLS), e.g. C#, Visual Basic


                                IL-Code (Früher Microsoft Intermediate Language)
                                Heute meist nur Intermediate Language (IL)


                                Virtuelle Maschine, die den IL-Code ausführt
                                Standardimplementierung:
                                Common Language Runtime (CLR)
Bildquelle: Wikipedia




                        Einführung in .NET und C# - Georg Hinkel
5




   Common Language Specification
• Definiert den gemeinsamen Nenner aller .NET-
  Sprachen
  – Einfachvererbung (Mehrfachvererbung nicht erlaubt)
  – Common Type System
     • Definiert Basisdatentypen
        – Int32 ist 32 bit lang, Int64 64 bit lang
        – Zeichenketten codiert in Unicode 16 „Little Endian“
  – Properties, Delegates, Events, u.a. (kommt später)

                     Einführung in .NET und C# - Georg Hinkel
6




         Intermediate Language
• Stackbasierter Bytecode
• Aus den fertigen Kompilaten direkt ablesbar
  – Mit Spezialprogrammen (.NET Reflector) Quellcode
    rekonstruierbar
  – Techniken um Rekonstruktion des Quellcodes zu
    verhindern notwendig



                 Einführung in .NET und C# - Georg Hinkel
7




  Common Language Runtime (CLR)
• Virtuelle Maschine mit Laufzeitumgebung
  – Dadurch plattformunabhängig
  – CLR nur für Windows erhältlich
  – Mono Projekt: CLR für Linux




                 Einführung in .NET und C# - Georg Hinkel
8




       Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
   – Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C#
   – Forschungssprachen von Microsoft Research
• GrGen.NET
   – Programmierung mit Graphen
• Boo, J#, Jscript.NET, Clarion.NET u.v.m



                    Einführung in .NET und C# - Georg Hinkel
9




       Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
   – Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C#
   – Forschungssprachen von Microsoft Research
• GrGen.NET
   – Programmierung mit Graphen
• Boo, J#, Jscript.NET, Clarion.NET u.v.m

• …etwa 10-20 weitere
                    Einführung in .NET und C# - Georg Hinkel
10




       Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
   – Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C# matter“
       „The language doesn‘t
   – Forschungssprachen von Microsoft Research
                      Dan Appleman

• GrGen.NET
   – Entwickelt am IPD/Uni Karlsruhe
• Boo, J#, Jscript.NET, Clarion.NET u.v.m

• …etwa 10-20 weitere
                    Einführung in .NET und C# - Georg Hinkel
11




           Zusammenfassung
• Grobe Architektur ähnlich
  Java
• Sprachvielfalt




               Einführung in .NET und C# - Georg Hinkel
Syntax, Properties, Delegates, Generics, ValueTypes, Structs
Syntax C#
13




                          Klassen
• Hier kein Grundkurs der Objektorientierung
  (Zeit!)
• Literatur: Galileo Openbook
  – http://openbook.galileocomputing.de/visual_csharp
    _2010/
  – http://openbook.galileocomputing.de/oop/



                 Einführung in .NET und C# - Georg Hinkel
14




Klassen – Syntax in C#
/// <summary>
/// Nur zu Demonstrationszwecken
/// </summary>
public class A : B, ICalculator
{
  public int Calc()
  {
      if (this.Id < 2)
      {
             return 0;
      }
      return 1;
  }
}
      Einführung in .NET und C# - Georg Hinkel
15




             Klassen – Syntax in C#
                                              Basisklasse        Schnittstelle
                 /// <summary>
Klassenname      /// Nur zu Demonstrationszwecken
                 /// </summary>
                 public class A : B, ICalculator
                 {
                    public int Calc()
                    {
                        if (this.Id < 2)
                        {
 Methodendefinition           return 0;
                        }                       Property
                        return 1;
                    }
                 }

                      Einführung in .NET und C# - Georg Hinkel
16




              Kontrollstrukturen
• Bedingte einfache Sprünge
  – if-Anweisung
• Schleifen
  – do/while-Schleifen
  – for-Schleifen
• Iterierte Schleifen mit foreach
• LINQ
                   Einführung in .NET und C# - Georg Hinkel
17




             Namenskonventionen
         Subjekt                             .NET
         Namensraum                          Pascal Case
         Klassennamen                        Pascal Case
         Methodennamen                       Pascal Case
         Klassenvariablen                    Camel Case
         Properties, Events                  Pascal Case
         Lokale Variablen                    Camel Case
         Schnittstellen                      Beginnen mit I
• Pascal Case: Alle Worte groß geschrieben, ohne Leerzeichen
• Camel Case: Wie Pascal Case, jedoch erster Buchstabe des ersten Wortes
auch klein


                          Einführung in .NET und C# - Georg Hinkel
18




                         Nomenklautur
Objektorientierung allgemein                     .NET
Klasse                                           Klasse
-                                                Struktur/Struct
-                                                Delegate
-                                                Event/Ereignis
Attribut                                         Klassenvariable/Feld
Feld                                             Array
- (Annotation in Java)                           Attribut
-                                                Property
Methode                                          Methode
Funktion                                         Funktion



                         Einführung in .NET und C# - Georg Hinkel
19




                          Properties
• „Eigenschaften“ eines Objekts
   – Getter/Setter-Paar
   – Automatisiert möglich
• Bestandteil der CLS
• Ähnlich Java „Beans-Architektur“
  private string name;
  public string Name
  {
            get { return name; }
            set { name = value; }
  }
  Alternative Schreibweise (automatisiert):
  public string Name { get; set; }

                      Einführung in .NET und C# - Georg Hinkel
20




           Properties - Vorteile
• Problem: Wieviel Berechnungsaufwand steckt
  hinter der Auswertung einer parameterlosen
  Funktion?
• Semantischer Unterschied
  – Funktionen, die „nur“ Klassenvariablen zurückgeben
  – Funktionen, die „hohen“ Berechnungsaufwand für
    die Auswertung benötigen

                 Einführung in .NET und C# - Georg Hinkel
21




            Properties - Vorteile
• Problem: Wieviel Berechnungsaufwand steckt hinter
  der Auswertung einer parameterlosen Funktion?
• Semantischer Unterschied
  – Funktionen, die „nur“ Klassenvariablen zurückgeben
  – Funktionen, die „hohen“ Berechnungsaufwand für die
    Auswertung benötigen


• Mit Properties: Syntaktischer Unterschied
                  Einführung in .NET und C# - Georg Hinkel
22




                      Delegates
• Ähnlich Funktionszeigern in C, nur mit Objekt
• Ein Delegate ist eine Klasse, also ein Datentyp

   public delegate void Foovoid()


• Verketten und Herauslösen möglich (e.g.
  Methode Delegate.Combine)
• Bestandteil der CLS

                 Einführung in .NET und C# - Georg Hinkel
23




                           Events
• Ähnlich Klassenvariable, aber es sind nach außen
  nur die Operationen Verketten und Herauslösen
  möglich public event Foovoid FooHappened;
• Bestandteil der CLS
• Faktisch in der Sprache implementiertes
  Observer-Pattern („Beobachtermuster“)


                Einführung in .NET und C# - Georg Hinkel
24




       Events – Konventionen (1)
• Objektorientierter Ansatz
  – Parameter/Rückgabe als Event-Objekt
  – Events nur Void-Delegates (ohne Rückgabe)
• Sender wird übergeben
  – Wiederverwendbarkeit der Handler-Methoden




                 Einführung in .NET und C# - Georg Hinkel
25




        Events – Konventionen (2)
• Standarddelegates für Events:
  – Mit Parametern/Rückgabe
     public delegate void EventHandler<T as EventArgs>(object sender, T event)

     public event EventHandler<ResolveEntityEventArgs> ResolveEntityRequired;

     Manchmal noch alter Code ohne Generizität
  – Ohne Parameter
     public delegate void EventHandler(object sender, EventArgs event)

     public event EventHandler PropertyChanged;

                        Einführung in .NET und C# - Georg Hinkel
26




         Events - Anwendungen
• Oberflächen
  – Windows Forms Button: 72 Events
  – WPF Button: 95 Events
• MVC/MVP/MVVM
  – Saubere Implementierung des Observer-Patterns




                Einführung in .NET und C# - Georg Hinkel
27




              Best Practise (1)
• Properties + Observer
 private string _name;

 public string Name {
        get {
              return _name;
        }
        set {
              if (_name != value) {
                     _name = value;
                     OnNameChanged(EventArgs.Empty);
              }
        }
 }


                 Einführung in .NET und C# - Georg Hinkel
28




              Best Practise (2)
• Properties + Observer
 protected virtual void OnNameChanged(EventArgs e)
 {
        EventHandler handler = NameChanged;
        if (handler != null)
        {
               handler.Invoke(this, e);
        }
 }

 public event EventHandler NameChanged;




                 Einführung in .NET und C# - Georg Hinkel
29




              Best Practise (2)
• Properties + Observer
 protected virtual void OnNameChanged(EventArgs e)
 {
        EventHandler handler = NameChanged;
        if (handler != null)
        {
               handler(this, e);
        }
 }

 public event EventHandler NameChanged;




                 Einführung in .NET und C# - Georg Hinkel
Werttypen, Referenztypen
31




       Werttypen, Referenztypen
• Java: int, double, … primitive Typen
  – Keine Objekte
  – Verstoß gegen Objektorientierung!
• .NET: Trennung Werttypen vs. Referenztypen
  – Vollständig objektorientiert
  – Automatisches Boxing/Unboxing


                 Einführung in .NET und C# - Georg Hinkel
32




               Referenztypen
• Zugriff nur über Referenz
• Eigentliches Objekt im Heap gespeichert
• Variablen sind nur Zeiger
 „normale Objekte“




                Einführung in .NET und C# - Georg Hinkel
33




                Werttypen (1)
• Overhead für kleine Objekte zu hoch
• Speicherung der Objekte „vor Ort“ im Stack
  – Boxing/Unboxing
  – Kein Zusätzlicher Speicherplatz notwendig (meist)
  – Werttypen sind immutable (unveränderlich)
  – Vererbung nicht möglich


                 Einführung in .NET und C# - Georg Hinkel
34




                  Werttypen (2)
• Definition eigener Werttypen möglich
  – Enumerationen: Definition mehrerer thematisch
    ähnlicher numerischer Konstanten
  – Structure: Wie Klassen, aber ohne Polymorphie
     • Structure erbt automatisch von ValueType
     • Implementierung von Schnittstellen trotzdem möglich
     • GetHashCode sollte überschrieben werden



                   Einführung in .NET und C# - Georg Hinkel
35




           Werttypen - Beispiel
• Structure Point (System.Drawing.Point)

   Point p = window.Location;
   p.X += 20;




  Was passiert? Was wäre, wenn Point eine
  Referenzklasse wäre (Reference Type)?


                 Einführung in .NET und C# - Georg Hinkel
36




           Werttypen - Beispiel
• Structure Point (System.Drawing.Point)

   Point p = window.Location;
   p.X += 20;
   window.Location = p;




  Was passiert? Was wäre, wenn Point eine
  Referenzklasse wäre (Reference Type)?


                 Einführung in .NET und C# - Georg Hinkel
37




Enumerationen – Syntax in C#
  /// <summary>
  /// Defines the gender of a patient
  /// </summary>
  public enum Gender
  {
      Male,
      Female,
      Unknown
  }




               Einführung in .NET und C# - Georg Hinkel
38




Enumerationen – Syntax in C#
  /// <summary>
  /// Defines the gender of a patient
  /// </summary>
  public enum Gender : byte
  {
      Male ,
      Female,
      Unknown
  }




               Einführung in .NET und C# - Georg Hinkel
39




Enumerationen – Syntax in C#
  /// <summary>
  /// Defines the gender of a patient
  /// </summary>
  [Flagged]
  public enum Gender : byte
  {
      Male = 2,
      Female = 4,
      Unknown = 1
  }



               Einführung in .NET und C# - Georg Hinkel
Lemming-Ameisen


Demo
Vielen Dank für eure Aufmerksamkeit!




 Präsentation von:
 Georg Hinkel
 Microsoft Student Partner
 KIT Karlsruhe
 georg.hinkel@studentpartners.de
42


             IT 4 Students
Der Newsletter rund um Microsoft Angebote für Studierende


Online:
www.microsoft.de/dreamspark




                    Einführung in .NET und C# - Georg Hinkel
43




/TechStudent                      Online
                                      Facebook
– das Portal für Geeks, Nerds und                www.facebook.com/
alle, die es noch werden wollen                  techstudentgermany
www.microsoft.de/techstuden
  t




                       Einführung in .NET und C# - Georg Hinkel
44



                    MSDN AA
MSDN AA = Microsoft Developer Network – Academic Alliance

Entwicklungsumgebungen, Datenbanken, Betriebssysteme
wie … Windows 7, Visio, Project, Visual Studio

Ausstattung der angebotenen Software für alle
  immatrikulierten Studierenden und die
  Lehreinrichtung

Online: www.msdnaa.de



                    Einführung in .NET und C# - Georg Hinkel
45


               DreamSpark
Kostenloser Softwaredownload für alle Studierenden

SDK, Visual Studio, Virtual PC, SQL Server und Co.


Online:
www.microsoft.de/dreamspark




                    Einführung in .NET und C# - Georg Hinkel

Weitere ähnliche Inhalte

PPTX
XML Xpath & XSLT
PDF
Git超入門_座学編.pdf
PDF
merise-slides.pdf
PDF
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
PDF
社内Java8勉強会 ラムダ式とストリームAPI
PDF
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
PDF
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
PPTX
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
XML Xpath & XSLT
Git超入門_座学編.pdf
merise-slides.pdf
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
社内Java8勉強会 ラムダ式とストリームAPI
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais

Andere mochten auch (20)

PPT
Einführung in .NET
PDF
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
PDF
C# für Fortgeschrittene
PPTX
Los fósiles (1)
PPTX
Roadmap von Microsoft UI Technologien und Windows 8
PPT
14. Defining Classes
PPT
0. Course Introduction
PPT
C# basics
PPT
08. Numeral Systems
PPTX
C# Tutorial
PPTX
.NET and C# Introduction
PPT
20. Object-Oriented Programming Fundamental Principles
PPTX
What is software engineering
PPSX
Introduction to .net framework
PDF
10 books that every developer must read
PDF
Cloud History 101
PPT
17. Trees and Graphs
PDF
Visualising Data with Code
PDF
[GER] Lessons learned: Modern JVM Languages besides Java
PPTX
Multithreading in c# mit tpl
Einführung in .NET
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
C# für Fortgeschrittene
Los fósiles (1)
Roadmap von Microsoft UI Technologien und Windows 8
14. Defining Classes
0. Course Introduction
C# basics
08. Numeral Systems
C# Tutorial
.NET and C# Introduction
20. Object-Oriented Programming Fundamental Principles
What is software engineering
Introduction to .net framework
10 books that every developer must read
Cloud History 101
17. Trees and Graphs
Visualising Data with Code
[GER] Lessons learned: Modern JVM Languages besides Java
Multithreading in c# mit tpl
Anzeige

Ähnlich wie Einführung in .NET mit C# (7)

PDF
C Sharp Einfuehrung Teil 1
PDF
.NET und jetzt!
PDF
C Sharp Einfuehrung Teil 2
PPT
Top 10 Internet Trends 2001
PDF
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
PPTX
C# 8.0, vNow and vNext
PDF
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
C Sharp Einfuehrung Teil 1
.NET und jetzt!
C Sharp Einfuehrung Teil 2
Top 10 Internet Trends 2001
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
C# 8.0, vNow and vNext
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Anzeige

Mehr von mspgermany (14)

PDF
Windows Phone 7: jetzt wird gecodet
PDF
Softwarequalität mit Visual Studio 2010
PDF
Einführung in die Spieleprogrammierung mit XNA
PDF
Office-Programmierung mit VBA
PDF
Windows Server 2008 R2 – Hyper-V
PDF
Windows Embedded Compact 7 Einführung - Ausblick – Möglichkeiten
PDF
Präsentationstraining PowerPoint Karaoke Version 2
PDF
Mit Stil ans Ziel
PDF
Präsentationstraining PowerPoint Karaoke
PDF
Windows Phone 7
PDF
Grundlagen der anwendungsentwicklung für windows phone 7
PDF
Usergroup 02 Berlin Windows7
PDF
Usergroup 02 Berlin Surface
PDF
Usergroup02 Berlin IE8
Windows Phone 7: jetzt wird gecodet
Softwarequalität mit Visual Studio 2010
Einführung in die Spieleprogrammierung mit XNA
Office-Programmierung mit VBA
Windows Server 2008 R2 – Hyper-V
Windows Embedded Compact 7 Einführung - Ausblick – Möglichkeiten
Präsentationstraining PowerPoint Karaoke Version 2
Mit Stil ans Ziel
Präsentationstraining PowerPoint Karaoke
Windows Phone 7
Grundlagen der anwendungsentwicklung für windows phone 7
Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Surface
Usergroup02 Berlin IE8

Einführung in .NET mit C#

  • 1. Einführung in C# Präsentation von: Georg Hinkel Microsoft Student Partner KIT Karlsruhe Georg.hinkel@studentpartners.de
  • 2. 2 Agenda • .NET Architektur, Terminologie • Syntax C# – Kontrollstrukturen, Namenskonventionen – Properties – Delegates, Events • Werttypen vs. Referenztypen Einführung in .NET und C# - Georg Hinkel
  • 3. Grober Aufbau der Plattform und Klärung der Begriffe Architektur & Terminologie
  • 4. 4 Architektur Programmiersprache (Standard: Common Language Specification, CLS), e.g. C#, Visual Basic IL-Code (Früher Microsoft Intermediate Language) Heute meist nur Intermediate Language (IL) Virtuelle Maschine, die den IL-Code ausführt Standardimplementierung: Common Language Runtime (CLR) Bildquelle: Wikipedia Einführung in .NET und C# - Georg Hinkel
  • 5. 5 Common Language Specification • Definiert den gemeinsamen Nenner aller .NET- Sprachen – Einfachvererbung (Mehrfachvererbung nicht erlaubt) – Common Type System • Definiert Basisdatentypen – Int32 ist 32 bit lang, Int64 64 bit lang – Zeichenketten codiert in Unicode 16 „Little Endian“ – Properties, Delegates, Events, u.a. (kommt später) Einführung in .NET und C# - Georg Hinkel
  • 6. 6 Intermediate Language • Stackbasierter Bytecode • Aus den fertigen Kompilaten direkt ablesbar – Mit Spezialprogrammen (.NET Reflector) Quellcode rekonstruierbar – Techniken um Rekonstruktion des Quellcodes zu verhindern notwendig Einführung in .NET und C# - Georg Hinkel
  • 7. 7 Common Language Runtime (CLR) • Virtuelle Maschine mit Laufzeitumgebung – Dadurch plattformunabhängig – CLR nur für Windows erhältlich – Mono Projekt: CLR für Linux Einführung in .NET und C# - Georg Hinkel
  • 8. 8 Auswahl der .NET-Sprachen • C#, Visual Basic, Managed C++, F# – Offiziell von Microsoft unterstützt • Cω, Asml, Spec#, Polyphonic C# – Forschungssprachen von Microsoft Research • GrGen.NET – Programmierung mit Graphen • Boo, J#, Jscript.NET, Clarion.NET u.v.m Einführung in .NET und C# - Georg Hinkel
  • 9. 9 Auswahl der .NET-Sprachen • C#, Visual Basic, Managed C++, F# – Offiziell von Microsoft unterstützt • Cω, Asml, Spec#, Polyphonic C# – Forschungssprachen von Microsoft Research • GrGen.NET – Programmierung mit Graphen • Boo, J#, Jscript.NET, Clarion.NET u.v.m • …etwa 10-20 weitere Einführung in .NET und C# - Georg Hinkel
  • 10. 10 Auswahl der .NET-Sprachen • C#, Visual Basic, Managed C++, F# – Offiziell von Microsoft unterstützt • Cω, Asml, Spec#, Polyphonic C# matter“ „The language doesn‘t – Forschungssprachen von Microsoft Research Dan Appleman • GrGen.NET – Entwickelt am IPD/Uni Karlsruhe • Boo, J#, Jscript.NET, Clarion.NET u.v.m • …etwa 10-20 weitere Einführung in .NET und C# - Georg Hinkel
  • 11. 11 Zusammenfassung • Grobe Architektur ähnlich Java • Sprachvielfalt Einführung in .NET und C# - Georg Hinkel
  • 12. Syntax, Properties, Delegates, Generics, ValueTypes, Structs Syntax C#
  • 13. 13 Klassen • Hier kein Grundkurs der Objektorientierung (Zeit!) • Literatur: Galileo Openbook – http://openbook.galileocomputing.de/visual_csharp _2010/ – http://openbook.galileocomputing.de/oop/ Einführung in .NET und C# - Georg Hinkel
  • 14. 14 Klassen – Syntax in C# /// <summary> /// Nur zu Demonstrationszwecken /// </summary> public class A : B, ICalculator { public int Calc() { if (this.Id < 2) { return 0; } return 1; } } Einführung in .NET und C# - Georg Hinkel
  • 15. 15 Klassen – Syntax in C# Basisklasse Schnittstelle /// <summary> Klassenname /// Nur zu Demonstrationszwecken /// </summary> public class A : B, ICalculator { public int Calc() { if (this.Id < 2) { Methodendefinition return 0; } Property return 1; } } Einführung in .NET und C# - Georg Hinkel
  • 16. 16 Kontrollstrukturen • Bedingte einfache Sprünge – if-Anweisung • Schleifen – do/while-Schleifen – for-Schleifen • Iterierte Schleifen mit foreach • LINQ Einführung in .NET und C# - Georg Hinkel
  • 17. 17 Namenskonventionen Subjekt .NET Namensraum Pascal Case Klassennamen Pascal Case Methodennamen Pascal Case Klassenvariablen Camel Case Properties, Events Pascal Case Lokale Variablen Camel Case Schnittstellen Beginnen mit I • Pascal Case: Alle Worte groß geschrieben, ohne Leerzeichen • Camel Case: Wie Pascal Case, jedoch erster Buchstabe des ersten Wortes auch klein Einführung in .NET und C# - Georg Hinkel
  • 18. 18 Nomenklautur Objektorientierung allgemein .NET Klasse Klasse - Struktur/Struct - Delegate - Event/Ereignis Attribut Klassenvariable/Feld Feld Array - (Annotation in Java) Attribut - Property Methode Methode Funktion Funktion Einführung in .NET und C# - Georg Hinkel
  • 19. 19 Properties • „Eigenschaften“ eines Objekts – Getter/Setter-Paar – Automatisiert möglich • Bestandteil der CLS • Ähnlich Java „Beans-Architektur“ private string name; public string Name { get { return name; } set { name = value; } } Alternative Schreibweise (automatisiert): public string Name { get; set; } Einführung in .NET und C# - Georg Hinkel
  • 20. 20 Properties - Vorteile • Problem: Wieviel Berechnungsaufwand steckt hinter der Auswertung einer parameterlosen Funktion? • Semantischer Unterschied – Funktionen, die „nur“ Klassenvariablen zurückgeben – Funktionen, die „hohen“ Berechnungsaufwand für die Auswertung benötigen Einführung in .NET und C# - Georg Hinkel
  • 21. 21 Properties - Vorteile • Problem: Wieviel Berechnungsaufwand steckt hinter der Auswertung einer parameterlosen Funktion? • Semantischer Unterschied – Funktionen, die „nur“ Klassenvariablen zurückgeben – Funktionen, die „hohen“ Berechnungsaufwand für die Auswertung benötigen • Mit Properties: Syntaktischer Unterschied Einführung in .NET und C# - Georg Hinkel
  • 22. 22 Delegates • Ähnlich Funktionszeigern in C, nur mit Objekt • Ein Delegate ist eine Klasse, also ein Datentyp public delegate void Foovoid() • Verketten und Herauslösen möglich (e.g. Methode Delegate.Combine) • Bestandteil der CLS Einführung in .NET und C# - Georg Hinkel
  • 23. 23 Events • Ähnlich Klassenvariable, aber es sind nach außen nur die Operationen Verketten und Herauslösen möglich public event Foovoid FooHappened; • Bestandteil der CLS • Faktisch in der Sprache implementiertes Observer-Pattern („Beobachtermuster“) Einführung in .NET und C# - Georg Hinkel
  • 24. 24 Events – Konventionen (1) • Objektorientierter Ansatz – Parameter/Rückgabe als Event-Objekt – Events nur Void-Delegates (ohne Rückgabe) • Sender wird übergeben – Wiederverwendbarkeit der Handler-Methoden Einführung in .NET und C# - Georg Hinkel
  • 25. 25 Events – Konventionen (2) • Standarddelegates für Events: – Mit Parametern/Rückgabe public delegate void EventHandler<T as EventArgs>(object sender, T event) public event EventHandler<ResolveEntityEventArgs> ResolveEntityRequired; Manchmal noch alter Code ohne Generizität – Ohne Parameter public delegate void EventHandler(object sender, EventArgs event) public event EventHandler PropertyChanged; Einführung in .NET und C# - Georg Hinkel
  • 26. 26 Events - Anwendungen • Oberflächen – Windows Forms Button: 72 Events – WPF Button: 95 Events • MVC/MVP/MVVM – Saubere Implementierung des Observer-Patterns Einführung in .NET und C# - Georg Hinkel
  • 27. 27 Best Practise (1) • Properties + Observer private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnNameChanged(EventArgs.Empty); } } } Einführung in .NET und C# - Georg Hinkel
  • 28. 28 Best Practise (2) • Properties + Observer protected virtual void OnNameChanged(EventArgs e) { EventHandler handler = NameChanged; if (handler != null) { handler.Invoke(this, e); } } public event EventHandler NameChanged; Einführung in .NET und C# - Georg Hinkel
  • 29. 29 Best Practise (2) • Properties + Observer protected virtual void OnNameChanged(EventArgs e) { EventHandler handler = NameChanged; if (handler != null) { handler(this, e); } } public event EventHandler NameChanged; Einführung in .NET und C# - Georg Hinkel
  • 31. 31 Werttypen, Referenztypen • Java: int, double, … primitive Typen – Keine Objekte – Verstoß gegen Objektorientierung! • .NET: Trennung Werttypen vs. Referenztypen – Vollständig objektorientiert – Automatisches Boxing/Unboxing Einführung in .NET und C# - Georg Hinkel
  • 32. 32 Referenztypen • Zugriff nur über Referenz • Eigentliches Objekt im Heap gespeichert • Variablen sind nur Zeiger  „normale Objekte“ Einführung in .NET und C# - Georg Hinkel
  • 33. 33 Werttypen (1) • Overhead für kleine Objekte zu hoch • Speicherung der Objekte „vor Ort“ im Stack – Boxing/Unboxing – Kein Zusätzlicher Speicherplatz notwendig (meist) – Werttypen sind immutable (unveränderlich) – Vererbung nicht möglich Einführung in .NET und C# - Georg Hinkel
  • 34. 34 Werttypen (2) • Definition eigener Werttypen möglich – Enumerationen: Definition mehrerer thematisch ähnlicher numerischer Konstanten – Structure: Wie Klassen, aber ohne Polymorphie • Structure erbt automatisch von ValueType • Implementierung von Schnittstellen trotzdem möglich • GetHashCode sollte überschrieben werden Einführung in .NET und C# - Georg Hinkel
  • 35. 35 Werttypen - Beispiel • Structure Point (System.Drawing.Point) Point p = window.Location; p.X += 20; Was passiert? Was wäre, wenn Point eine Referenzklasse wäre (Reference Type)? Einführung in .NET und C# - Georg Hinkel
  • 36. 36 Werttypen - Beispiel • Structure Point (System.Drawing.Point) Point p = window.Location; p.X += 20; window.Location = p; Was passiert? Was wäre, wenn Point eine Referenzklasse wäre (Reference Type)? Einführung in .NET und C# - Georg Hinkel
  • 37. 37 Enumerationen – Syntax in C# /// <summary> /// Defines the gender of a patient /// </summary> public enum Gender { Male, Female, Unknown } Einführung in .NET und C# - Georg Hinkel
  • 38. 38 Enumerationen – Syntax in C# /// <summary> /// Defines the gender of a patient /// </summary> public enum Gender : byte { Male , Female, Unknown } Einführung in .NET und C# - Georg Hinkel
  • 39. 39 Enumerationen – Syntax in C# /// <summary> /// Defines the gender of a patient /// </summary> [Flagged] public enum Gender : byte { Male = 2, Female = 4, Unknown = 1 } Einführung in .NET und C# - Georg Hinkel
  • 41. Vielen Dank für eure Aufmerksamkeit! Präsentation von: Georg Hinkel Microsoft Student Partner KIT Karlsruhe georg.hinkel@studentpartners.de
  • 42. 42 IT 4 Students Der Newsletter rund um Microsoft Angebote für Studierende Online: www.microsoft.de/dreamspark Einführung in .NET und C# - Georg Hinkel
  • 43. 43 /TechStudent Online Facebook – das Portal für Geeks, Nerds und www.facebook.com/ alle, die es noch werden wollen techstudentgermany www.microsoft.de/techstuden t Einführung in .NET und C# - Georg Hinkel
  • 44. 44 MSDN AA MSDN AA = Microsoft Developer Network – Academic Alliance Entwicklungsumgebungen, Datenbanken, Betriebssysteme wie … Windows 7, Visio, Project, Visual Studio Ausstattung der angebotenen Software für alle immatrikulierten Studierenden und die Lehreinrichtung Online: www.msdnaa.de Einführung in .NET und C# - Georg Hinkel
  • 45. 45 DreamSpark Kostenloser Softwaredownload für alle Studierenden SDK, Visual Studio, Virtual PC, SQL Server und Co. Online: www.microsoft.de/dreamspark Einführung in .NET und C# - Georg Hinkel