SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
C#
       für Fortgeschrittene


Präsentation von:
Carl-Philip Wenz
Microsoft Student Partner
Hochschule RheinMain
E-Mail: carl-philip.wenz@studentpartners.de
02.03.2011   2




                     Agenda
•   Erweiterte „Grundlagen“
•   Funktionale Aspekte
•   Dynamische Aspekte
•   Operator Überladung
02.03.2011   3




Initialisierungslisten, var, Anonyme Klassen
Erweiterte „Grundlagen“
02.03.2011   4




             Initialisierungslisten

Properties




                         Initialisierungsliste
02.03.2011               5




                   Schlüsselwort: var
• var = automatische Typ Ableitung
• abgeleiteter Typ fest (unveränderbar)



         int x=12345;                          var x=12345;
     string test=“Hallo“;    äquivalent      var test=“Hallo“;
  Point punkt=new Point();                var punkt=new Point();
02.03.2011        6




                    Anonyme Typen

Schlüsselwort var
                              Initialisierungsliste
yield, Lambda, LINQ
Funktionale Programmierung
Schlüsselwort: yield
• dynamisch Werte liefern
• flexibles Anlegen von Aufzählungen




                        1 : anfordern     Client-Code:
                                           Methoden
   IEnumarable        2 : yield return   foreach, LINQ
02.03.2011   9




                   Schlüsselwort: yield
class Points
{
    private Random numberGenerator = new Random();

    public int Count { get; set; }
    public int Max { get; set; }
    public int Min { get; set; }

    public IEnumerable<Point> GeneratePoints
    {
        get
        {
            for (int counter = 0; counter < Count; counter++)
            {
                yield return new Point
                {
                    X = numberGenerator.Next(Min, Max),
                    Y = numberGenerator.Next(Min, Max)
                };
            }
        }
    }
}
02.03.2011              10




             Schlüsselwort: yield

static void Main(string[] args)
{
    Points generator = new Points { Min = 1, Max = 10, Count = 10 };
    foreach (Point current in generator.GeneratePoints)
    {
        Console.WriteLine("({0},{1})", current.X, current.Y);
    }
    Console.ReadLine();
}
02.03.2011    11




         Lambda - Ausdrücke
• Delegates = Funktionszeiger
• Lambda-Ausrücke: Anonyme Methoden ganz
  kompakt

   (Parameter1, …) => Ausdruck
   (Parameter1, …)=> {Code-Block}
02.03.2011        12




               Lambda - Beispiel
static void Main(string[] args)
{
    Func<int, int, int> Summe = (a, b) => a + b;
    Func<int, int, int, int> Summe = (a, b, c) => a + b + c;
    Action<int> Print =
       number => Console.WriteLine("Ergebnis: {0}", number);
    Print(Summe(3, 4));
    Print(Summe(10, 5));
    Print(Summe(10, 5, 4));
}
02.03.2011             13




                      Was ist LINQ?
• Language Integrated Query
• from item in collection where xxx select yyy

 int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 var even = from x in numbers where x % 2 == 0 select x;
 var doubleNumbers = from x in numbers select x * 2;
 var textNumbers = from x in numbers select "Nummer: " + x.ToString();
02.03.2011   14




                    LINQ-Quellen
• Abfragetypen
  – Objekte
  – XML
  – Datenbank
  – viele weitere
     • Amazon, Bing, SAP, ………….
02.03.2011               15




                LINQ-Theorie
                                                 from

• fließbandartiges
  Abarbeiten
• beliebiges Verketten
  möglich
• Lazy-Evaluation                       select   where
02.03.2011     16




        LINQ – Syntax-Varianten
Lambda – Variante         Query Comprehension
• list.where(a=>a%2==0)   • from x in y select z
• Aufruf von Methoden     • SQL ähnliche Syntax
• Übergeben von Lambda-   • komprimierte Ausdrücke
  Ausdrücken
02.03.2011    17




           LINQ - Schlüsselwörter
•   from – Iterieren von Werten | Kreuzprodukt
•   where – Filtern von Werten
•   order x by y – Sortieren
•   group x by y into z – Gruppieren
•   select – Projezieren
02.03.2011                      18


                                      LINQ Beispiel 1
 var Personen = new[]
 {
     new {Name="Carl", ID=0}, new {Name="Max Mustermann", ID=1}, new {Name="Müller", ID=2}
 };
 var Produkte = new[]
 {
     new {ID=0, Name="Bleistift", Preis=1.5}, new {ID=1, Name="Papier", Preis=2.75}
 };
 var Bestellungen = new[]
 {
      new {Kunde=0, Produkt=0, Menge=2 },new {Kunde=0, Produkt=2, Menge=1 },
      new {Kunde=1, Produkt=0, Menge=2 },new {Kunde=0, Produkt=3, Menge=3 }
 };

var KundenBestellungen = from posten in Bestellungen
     group posten by posten.Kunde into gruppe select new { KundenID = gruppe.Key, Bestellungen = gruppe };
var GesamtSumme = from kunde in Personen from gruppe in KundenBestellungen
     where kunde.ID == gruppe.KundenID
     select new {
       Name = kunde.Name,
       GesamtKosten =
       ( from produkt in Produkte from posten in gruppe.Bestellungen where produkt.ID == posten.Produkt
          select posten.Menge * produkt.Preis).Sum()
       };
02.03.2011                19




                               LINQ Beispiel 2
static int ggT(int a, int b)
{
    while (b != 0){int h = a % b; a = b; b = h;}
    return a;
}
static void Main(string[] args)
{
    var Zahlen = Enumerable.Range(2, 20);
    var WertePaare = from a in Zahlen from b in Zahlen select new Tuple<int, int>(a, b);
     var gleicherGGT = from item in WertePaare
                         group item by ggT(item.Item1, item.Item2) into ggT_Group
                         where ggT_Group.Count()>2 && ggT_Group.Key!=1
                         select new { GGT = ggT_Group.Key, Werte = ggT_Group };
    foreach (var item in gleicherGGT)
    {
        Console.WriteLine("ggT: {0}",item.GGT);
        foreach (var pair in item.Werte) Console.Write("({0}|{1}) ", pair.Item1, pair.Item2);
        Console.WriteLine();
    }
}
02.03.2011             20




                         LINQ to XML
• X-DOM -> performant und LINQ optimiert
                                                XAttribute
                                 XElement
                                                 XElement          XText
XDocument        XElement
                                 XElement       XComment
XDocument doc = new XDocument();
doc.Add(
  new XElement(XName.Get("Root"),                      Funktionales Erzeugen
      new XElement(XName.Get("Left"),
          new XAttribute(XName.Get("Key"),"Value"),
          new XElement(XName.Get("Inner"),new XText("Inhalt"))
          ),
      new XElement(XName.Get("Right"),new XComment("Comment"))
  )
);
Console.Write(doc.ToString());
02.03.2011          21




            LINQ to XML - Beispiel
var doc = XDocument.Load("http://www.stnc.de/Feeds/News");

var allLinks =
       from item in doc.Descendants(XName.Get("item"))
       where item.Element(XName.Get("title")).
              Value.Contains("Windows")
       select item.Element(XName.Get("link")).Value;

foreach (var link in allLinks) Console.WriteLine(link);
PLINQ
• LINQ + Parallelität
• Enumarable.AsParallel
• Aufzählungen mit yield haben AsParallel
02.03.2011       23




                    PLINQ Beispiel
var Zahlen = Enumerable.Range(2, 200);
var WertePaare = from a in Zahlen
                   from b in Zahlen
                   select new Tuple<int, int>(a, b);
var ggT_Werte = from item in WertePaare.AsParallel()
                select new
                {
                   ggT=ggT(item.Item1, item.Item2),Pair=item
                };


foreach (var item in ggT_Werte)
{
    Console.WriteLine("ggT({0},{1}): {2}",
         item.Pair.Item1,item.Pair.Item2,item.ggT);
}
Dynamics
Dynamische Programmierung
Dynamische Programmierung
• keine festgelegten Typen
• dynamisches Erstellen neuer Typen
• Duck-Typing
02.03.2011   26




            dynamic - Theorie
• dynamic steuerbar: DynamicObject
• Typen erzeugen: ExpandoObject

• Aktivieren von dynamics:
     dynamic name=XXXXX;
02.03.2011       27




                   Beispiel - dynamic
private static dynamic Plus(dynamic a, dynamic b)
{
  try
  {
     a = a.ToUpper();
     b = b.ToUpper();
  }
  catch (Exception) { }
  return a + b;
}
static void Main(string[] args)
{
  Console.WriteLine("3+4= {0}", Plus(3, 4));
  Console.WriteLine("Hallo + Welt = {0}", Plus("Hallo ", "Welt"));
}
02.03.2011      28




                   Beispiel – Typen erzeugen
private static void PrintInfo(dynamic info)
{
  Console.WriteLine("X: {0} Y: {1} Size: {2}", info.X, info.Y, info.Size());
}
private static void AddMethods(dynamic toFill)
{
  toFill.Size = new Func<double>(() => Math.Sqrt(toFill.X * toFill.X + toFill.Y * toFill.Y));
  toFill.Move = new Action<int, int>((a, b) => { toFill.X += a; toFill.Y += b; });
}
static void Main(string[] args)
{
  dynamic vector = new ExpandoObject();
  vector.X = 20;
  vector.Y = 10;
  AddMethods(vector);
    PrintInfo(vector);
    vector.Move(-10, 5);
    PrintInfo(vector);
}
02.03.2011       29



            Beispiel – Dynamic steuerbar
class DynamicExample : DynamicObject
{
  public override bool TryGetMember(GetMemberBinder binder, out object result)
  {
    Console.WriteLine("# Es wurde versucht {0} zu benutzen.", binder.Name);
    result = "Hallo"; return true;
  }
  public override bool TrySetMember(SetMemberBinder binder, object value)
  {
    Console.WriteLine("# {0} = {1}", binder.Name, value.ToString());
    return true;
  }
  public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
  {
    Console.WriteLine("# Methoden Aufruf {0}.", binder.Name);
    result = null; return true;
  }
}
static void Main(string[] args)
{
        dynamic test = new DynamicExample();
        test.Hallo(); test.Variable = 25;
        Console.WriteLine("Zugriff auf Variable Vorname: {0}", test.Vorname);
}
Operatorüberladung
02.03.2011   31




               Operatorüberladung
• alle Operatorüberladungen statisch
• public static returnType operatoroperator(parameter)



   !, ~, ++, --, +, -, *, /, %, &, |,
   ^, <<, >>, ==, !=, <, >, <=, >=
02.03.2011           32




public class Vector
{
                         Beispiel
       public int X { get; set; } public int Y { get; set; }
       public static Vector operator+(Vector a, Vector b)
       { return new Vector { X = a.X + b.X, Y = a.Y + b.Y }; }
       public static Vector operator ++(Vector input)
       { return new Vector { X = input.X + 1, Y = input.Y + 1 }; }
       public override string ToString()
       { return string.Format("Point ({0}|{1})", X, Y); }
}
static void Main(string[] args)
{
       Vector a = new Vector { X = 1, Y = 2 };
       Vector b = new Vector { X = 2, Y = 3 };
       Vector c = a + b;
       Console.WriteLine(c++);Console.WriteLine(c++);
}
Materialien
• Visual Studio 2010 | Visual C# 2010 Express
• Bücher:




   – OpenBook von Galileo Computing:
       • http://openbook.galileocomputing.de/visual_csharp_2
         010/
02.03.2011   34




            Weiterführendes
• Empfehlung => F#
• Spaß am Programmieren mit Pex4Fun
02.03.2011   35




Fragen und Antworten
Vielen Dank für Ihre/Eure Aufmerksamkeit!

Mais conteúdo relacionado

Mais de mspgermany

Windows Phone 7: jetzt wird gecodet
Windows Phone 7: jetzt wird gecodetWindows Phone 7: jetzt wird gecodet
Windows Phone 7: jetzt wird gecodetmspgermany
 
Softwarequalität mit Visual Studio 2010
Softwarequalität mit Visual Studio 2010Softwarequalität mit Visual Studio 2010
Softwarequalität mit Visual Studio 2010mspgermany
 
Einführung in die Spieleprogrammierung mit XNA
Einführung in die Spieleprogrammierung mit XNAEinführung in die Spieleprogrammierung mit XNA
Einführung in die Spieleprogrammierung mit XNAmspgermany
 
Office-Programmierung mit VBA
Office-Programmierung mit VBAOffice-Programmierung mit VBA
Office-Programmierung mit VBAmspgermany
 
Windows Server 2008 R2 – Hyper-V
Windows Server 2008 R2 – Hyper-VWindows Server 2008 R2 – Hyper-V
Windows Server 2008 R2 – Hyper-Vmspgermany
 
Windows Embedded Compact 7 Einführung - Ausblick – Möglichkeiten
Windows Embedded Compact 7 Einführung - Ausblick – MöglichkeitenWindows Embedded Compact 7 Einführung - Ausblick – Möglichkeiten
Windows Embedded Compact 7 Einführung - Ausblick – Möglichkeitenmspgermany
 
Präsentationstraining PowerPoint Karaoke Version 2
Präsentationstraining PowerPoint Karaoke Version 2Präsentationstraining PowerPoint Karaoke Version 2
Präsentationstraining PowerPoint Karaoke Version 2mspgermany
 
Mit Stil ans Ziel
Mit Stil ans ZielMit Stil ans Ziel
Mit Stil ans Zielmspgermany
 
Präsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint KaraokePräsentationstraining PowerPoint Karaoke
Präsentationstraining PowerPoint Karaokemspgermany
 
Windows Phone 7
Windows Phone 7Windows Phone 7
Windows Phone 7mspgermany
 
Grundlagen der anwendungsentwicklung für windows phone 7
Grundlagen der anwendungsentwicklung für windows phone 7Grundlagen der anwendungsentwicklung für windows phone 7
Grundlagen der anwendungsentwicklung für windows phone 7mspgermany
 
Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7mspgermany
 
Usergroup 02 Berlin Surface
Usergroup 02 Berlin SurfaceUsergroup 02 Berlin Surface
Usergroup 02 Berlin Surfacemspgermany
 
Usergroup02 Berlin IE8
Usergroup02 Berlin IE8Usergroup02 Berlin IE8
Usergroup02 Berlin IE8mspgermany
 

Mais de mspgermany (14)

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

C# für Fortgeschrittene

  • 1. C# für Fortgeschrittene Präsentation von: Carl-Philip Wenz Microsoft Student Partner Hochschule RheinMain E-Mail: carl-philip.wenz@studentpartners.de
  • 2. 02.03.2011 2 Agenda • Erweiterte „Grundlagen“ • Funktionale Aspekte • Dynamische Aspekte • Operator Überladung
  • 3. 02.03.2011 3 Initialisierungslisten, var, Anonyme Klassen Erweiterte „Grundlagen“
  • 4. 02.03.2011 4 Initialisierungslisten Properties Initialisierungsliste
  • 5. 02.03.2011 5 Schlüsselwort: var • var = automatische Typ Ableitung • abgeleiteter Typ fest (unveränderbar) int x=12345; var x=12345; string test=“Hallo“; äquivalent var test=“Hallo“; Point punkt=new Point(); var punkt=new Point();
  • 6. 02.03.2011 6 Anonyme Typen Schlüsselwort var Initialisierungsliste
  • 8. Schlüsselwort: yield • dynamisch Werte liefern • flexibles Anlegen von Aufzählungen 1 : anfordern Client-Code: Methoden IEnumarable 2 : yield return foreach, LINQ
  • 9. 02.03.2011 9 Schlüsselwort: yield class Points { private Random numberGenerator = new Random(); public int Count { get; set; } public int Max { get; set; } public int Min { get; set; } public IEnumerable<Point> GeneratePoints { get { for (int counter = 0; counter < Count; counter++) { yield return new Point { X = numberGenerator.Next(Min, Max), Y = numberGenerator.Next(Min, Max) }; } } } }
  • 10. 02.03.2011 10 Schlüsselwort: yield static void Main(string[] args) { Points generator = new Points { Min = 1, Max = 10, Count = 10 }; foreach (Point current in generator.GeneratePoints) { Console.WriteLine("({0},{1})", current.X, current.Y); } Console.ReadLine(); }
  • 11. 02.03.2011 11 Lambda - Ausdrücke • Delegates = Funktionszeiger • Lambda-Ausrücke: Anonyme Methoden ganz kompakt (Parameter1, …) => Ausdruck (Parameter1, …)=> {Code-Block}
  • 12. 02.03.2011 12 Lambda - Beispiel static void Main(string[] args) { Func<int, int, int> Summe = (a, b) => a + b; Func<int, int, int, int> Summe = (a, b, c) => a + b + c; Action<int> Print = number => Console.WriteLine("Ergebnis: {0}", number); Print(Summe(3, 4)); Print(Summe(10, 5)); Print(Summe(10, 5, 4)); }
  • 13. 02.03.2011 13 Was ist LINQ? • Language Integrated Query • from item in collection where xxx select yyy int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var even = from x in numbers where x % 2 == 0 select x; var doubleNumbers = from x in numbers select x * 2; var textNumbers = from x in numbers select "Nummer: " + x.ToString();
  • 14. 02.03.2011 14 LINQ-Quellen • Abfragetypen – Objekte – XML – Datenbank – viele weitere • Amazon, Bing, SAP, ………….
  • 15. 02.03.2011 15 LINQ-Theorie from • fließbandartiges Abarbeiten • beliebiges Verketten möglich • Lazy-Evaluation select where
  • 16. 02.03.2011 16 LINQ – Syntax-Varianten Lambda – Variante Query Comprehension • list.where(a=>a%2==0) • from x in y select z • Aufruf von Methoden • SQL ähnliche Syntax • Übergeben von Lambda- • komprimierte Ausdrücke Ausdrücken
  • 17. 02.03.2011 17 LINQ - Schlüsselwörter • from – Iterieren von Werten | Kreuzprodukt • where – Filtern von Werten • order x by y – Sortieren • group x by y into z – Gruppieren • select – Projezieren
  • 18. 02.03.2011 18 LINQ Beispiel 1 var Personen = new[] { new {Name="Carl", ID=0}, new {Name="Max Mustermann", ID=1}, new {Name="Müller", ID=2} }; var Produkte = new[] { new {ID=0, Name="Bleistift", Preis=1.5}, new {ID=1, Name="Papier", Preis=2.75} }; var Bestellungen = new[] { new {Kunde=0, Produkt=0, Menge=2 },new {Kunde=0, Produkt=2, Menge=1 }, new {Kunde=1, Produkt=0, Menge=2 },new {Kunde=0, Produkt=3, Menge=3 } }; var KundenBestellungen = from posten in Bestellungen group posten by posten.Kunde into gruppe select new { KundenID = gruppe.Key, Bestellungen = gruppe }; var GesamtSumme = from kunde in Personen from gruppe in KundenBestellungen where kunde.ID == gruppe.KundenID select new { Name = kunde.Name, GesamtKosten = ( from produkt in Produkte from posten in gruppe.Bestellungen where produkt.ID == posten.Produkt select posten.Menge * produkt.Preis).Sum() };
  • 19. 02.03.2011 19 LINQ Beispiel 2 static int ggT(int a, int b) { while (b != 0){int h = a % b; a = b; b = h;} return a; } static void Main(string[] args) { var Zahlen = Enumerable.Range(2, 20); var WertePaare = from a in Zahlen from b in Zahlen select new Tuple<int, int>(a, b); var gleicherGGT = from item in WertePaare group item by ggT(item.Item1, item.Item2) into ggT_Group where ggT_Group.Count()>2 && ggT_Group.Key!=1 select new { GGT = ggT_Group.Key, Werte = ggT_Group }; foreach (var item in gleicherGGT) { Console.WriteLine("ggT: {0}",item.GGT); foreach (var pair in item.Werte) Console.Write("({0}|{1}) ", pair.Item1, pair.Item2); Console.WriteLine(); } }
  • 20. 02.03.2011 20 LINQ to XML • X-DOM -> performant und LINQ optimiert XAttribute XElement XElement XText XDocument XElement XElement XComment XDocument doc = new XDocument(); doc.Add( new XElement(XName.Get("Root"), Funktionales Erzeugen new XElement(XName.Get("Left"), new XAttribute(XName.Get("Key"),"Value"), new XElement(XName.Get("Inner"),new XText("Inhalt")) ), new XElement(XName.Get("Right"),new XComment("Comment")) ) ); Console.Write(doc.ToString());
  • 21. 02.03.2011 21 LINQ to XML - Beispiel var doc = XDocument.Load("http://www.stnc.de/Feeds/News"); var allLinks = from item in doc.Descendants(XName.Get("item")) where item.Element(XName.Get("title")). Value.Contains("Windows") select item.Element(XName.Get("link")).Value; foreach (var link in allLinks) Console.WriteLine(link);
  • 22. PLINQ • LINQ + Parallelität • Enumarable.AsParallel • Aufzählungen mit yield haben AsParallel
  • 23. 02.03.2011 23 PLINQ Beispiel var Zahlen = Enumerable.Range(2, 200); var WertePaare = from a in Zahlen from b in Zahlen select new Tuple<int, int>(a, b); var ggT_Werte = from item in WertePaare.AsParallel() select new { ggT=ggT(item.Item1, item.Item2),Pair=item }; foreach (var item in ggT_Werte) { Console.WriteLine("ggT({0},{1}): {2}", item.Pair.Item1,item.Pair.Item2,item.ggT); }
  • 25. Dynamische Programmierung • keine festgelegten Typen • dynamisches Erstellen neuer Typen • Duck-Typing
  • 26. 02.03.2011 26 dynamic - Theorie • dynamic steuerbar: DynamicObject • Typen erzeugen: ExpandoObject • Aktivieren von dynamics: dynamic name=XXXXX;
  • 27. 02.03.2011 27 Beispiel - dynamic private static dynamic Plus(dynamic a, dynamic b) { try { a = a.ToUpper(); b = b.ToUpper(); } catch (Exception) { } return a + b; } static void Main(string[] args) { Console.WriteLine("3+4= {0}", Plus(3, 4)); Console.WriteLine("Hallo + Welt = {0}", Plus("Hallo ", "Welt")); }
  • 28. 02.03.2011 28 Beispiel – Typen erzeugen private static void PrintInfo(dynamic info) { Console.WriteLine("X: {0} Y: {1} Size: {2}", info.X, info.Y, info.Size()); } private static void AddMethods(dynamic toFill) { toFill.Size = new Func<double>(() => Math.Sqrt(toFill.X * toFill.X + toFill.Y * toFill.Y)); toFill.Move = new Action<int, int>((a, b) => { toFill.X += a; toFill.Y += b; }); } static void Main(string[] args) { dynamic vector = new ExpandoObject(); vector.X = 20; vector.Y = 10; AddMethods(vector); PrintInfo(vector); vector.Move(-10, 5); PrintInfo(vector); }
  • 29. 02.03.2011 29 Beispiel – Dynamic steuerbar class DynamicExample : DynamicObject { public override bool TryGetMember(GetMemberBinder binder, out object result) { Console.WriteLine("# Es wurde versucht {0} zu benutzen.", binder.Name); result = "Hallo"; return true; } public override bool TrySetMember(SetMemberBinder binder, object value) { Console.WriteLine("# {0} = {1}", binder.Name, value.ToString()); return true; } public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { Console.WriteLine("# Methoden Aufruf {0}.", binder.Name); result = null; return true; } } static void Main(string[] args) { dynamic test = new DynamicExample(); test.Hallo(); test.Variable = 25; Console.WriteLine("Zugriff auf Variable Vorname: {0}", test.Vorname); }
  • 31. 02.03.2011 31 Operatorüberladung • alle Operatorüberladungen statisch • public static returnType operatoroperator(parameter) !, ~, ++, --, +, -, *, /, %, &, |, ^, <<, >>, ==, !=, <, >, <=, >=
  • 32. 02.03.2011 32 public class Vector { Beispiel public int X { get; set; } public int Y { get; set; } public static Vector operator+(Vector a, Vector b) { return new Vector { X = a.X + b.X, Y = a.Y + b.Y }; } public static Vector operator ++(Vector input) { return new Vector { X = input.X + 1, Y = input.Y + 1 }; } public override string ToString() { return string.Format("Point ({0}|{1})", X, Y); } } static void Main(string[] args) { Vector a = new Vector { X = 1, Y = 2 }; Vector b = new Vector { X = 2, Y = 3 }; Vector c = a + b; Console.WriteLine(c++);Console.WriteLine(c++); }
  • 33. Materialien • Visual Studio 2010 | Visual C# 2010 Express • Bücher: – OpenBook von Galileo Computing: • http://openbook.galileocomputing.de/visual_csharp_2 010/
  • 34. 02.03.2011 34 Weiterführendes • Empfehlung => F# • Spaß am Programmieren mit Pex4Fun
  • 35. 02.03.2011 35 Fragen und Antworten Vielen Dank für Ihre/Eure Aufmerksamkeit!