SlideShare a Scribd company logo
1 of 63
Download to read offline
Alles
                              Vertragssache!
                              Ko- und Kontravarianz in C#



                                     Lars Corneliussen
                                             itemis AG


                                               itemis.de
                                      lcorneliussen.com

Mittwoch, 25. November 2009
Kovarianz und Kontravarianz ist die
                              Unterscheidung, ob ein Aspekt

                              gleichartig der
                              Vererbungsrichtung (kovariant)
                              oder

                              entgegengesetzt zu dieser
                              (kontravariant)

                              ist.



Mittwoch, 25. November 2009
Aspekt = Typdeklaration




Mittwoch, 25. November 2009
Varianz = Abweichung




Mittwoch, 25. November 2009
Ko- und Kontravarianz
                      ... beschreibt die erlaubte Abweichung vom
                      deklarierten Typ.




Mittwoch, 25. November 2009
object


                Vererbungrichtung



                                    string



Mittwoch, 25. November 2009
deklarierter Typ


                              Vererbungrichtung
          object                                  string
      object meinObjekt =                         "abcd";




Mittwoch, 25. November 2009
deklarierter Typ


                              Vererbungrichtung
          object                                  string
      object meinObjekt =                         "abcd";

                               Abweichung




Mittwoch, 25. November 2009
deklarierter Typ


                               Vererbungrichtung
          object                                   string
      object meinObjekt =                          "abcd";

                                Abweichung


                              kontravariant
Mittwoch, 25. November 2009
public string Methode( object parameter) {

             return "Hallo, Welt!";

      }




    object x = Methode( "abc" );


Mittwoch, 25. November 2009
deklarierter Typ
                                            object
      public string Methode( object parameter) {

             return "Hallo, Welt!";

      }

                              Vererbungrichtung

                                                  string
    object x = Methode( "abc" );


Mittwoch, 25. November 2009
deklarierter Typ
                                            object
      public string Methode( object parameter) {

             return "Hallo, Welt!";

      }
                                                     Abweichung

                              Vererbungrichtung

                                                  string
    object x = Methode( "abc" );


Mittwoch, 25. November 2009
Variablen und Parameter
       sind kontravariant
                        ... sie erlauben Zuweisungen von Werten,
                        deren Typen entgegengesetzt zur
                        Vererbungsrichtung abweichen.




Mittwoch, 25. November 2009
public string Methode( object parameter) {

             return "Hallo, Welt!";

      }




    object x = Methode( "abc" );


Mittwoch, 25. November 2009
deklarierter Typ
                              string
      public string Methode( object parameter) {

             return "Hallo, Welt!";

      }
                      Vererbungrichtung



    object
    object x = Methode( "abc" );


Mittwoch, 25. November 2009
deklarierter Typ
                              string
      public string Methode( object parameter) {

             return "Hallo, Welt!";

      }
                      Vererbungrichtung


                                       Abweichung
    object
    object x = Methode( "abc" );

                                       kovariant
Mittwoch, 25. November 2009
Methodenrückgaben
       sind kovariant
                        ... sie können Variablen zugewiesen werden,
                        deren Typ gleichartig mit der
                        Vererbungsrichtung abweicht.




Mittwoch, 25. November 2009
Ko- und Kontravarianz in
                        Generics



Mittwoch, 25. November 2009
IList<                     object   > meineObjekte
                                           = new List<   string   >;




Mittwoch, 25. November 2009
deklarierter Typ


                                           Vererbungrichtung
                              object
                                                         string
   IList<                     object   > meineObjekte
                                           = new List<   string   >;




Mittwoch, 25. November 2009
deklarierter Typ


                                           Vererbungrichtung
                              object
                                                         string
   IList<                     object   > meineObjekte
                                           = new List<   string   >;


                                          Abweichung



                              kontravariant! Fertig!?
Mittwoch, 25. November 2009
Mit string und object
                  kommen wir nicht weit...



Mittwoch, 25. November 2009
Tier
  Säugetier                          Reptil




Mittwoch, 25. November 2009
Das Problem bei einer
                          generischen Liste:



Mittwoch, 25. November 2009
List<           >




Mittwoch, 25. November 2009
List<                    >




                              IList<       >




Mittwoch, 25. November 2009
List<                    >




                                               Peter

                              IList<       >




Mittwoch, 25. November 2009
List<           >




                                      Peter

  Klaus IList<                    >




Mittwoch, 25. November 2009
List<                    >




                                               Peter

                              IList<       >




Mittwoch, 25. November 2009
Bis C# 3.0 sind
       generische Typparameter
       invariant
                        ... sie können in der Benutzung nicht vom
                        implementierten Typ abweichen.




Mittwoch, 25. November 2009
C# 4 unterstützt...
                         ... sichere Ko- und Kontravarianz von
                         generischen Typparametern.




Mittwoch, 25. November 2009
Sehen wir uns mal ein
                         paar Varianten an...



Mittwoch, 25. November 2009
Ein Tier-Geschenk zum
                            auspacken...



Mittwoch, 25. November 2009
Generische Schnittstelle
                                                         IGeschenk<    T>

                                                         + Auspacken() : T




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                IGeschenk<        T>

                                                               + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                               + Auspacken() :
                                             ;
                              }

                                                                 Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                 IGeschenk<        T>

                                                                + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                                + Auspacken() :
                                             ;
                              }

                                                                  Konkrete Schnittstelle



                              IGeschenk<            >          Hoffentlich ein




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                IGeschenk<        T>

                                                               + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                               + Auspacken() :
                                             ;
                              }

                                                                 Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                 IGeschenk<        T>

                                                                + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                                + Auspacken() :
                                             ;
                              }

                                                                  Konkrete Schnittstelle



                                                               Hoffentlich ein




        IGeschenk<Tier>
Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                IGeschenk<        T>

                                                               + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                               + Auspacken() :
                                             ;
                              }

                                                                 Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                IGeschenk<        T>

                                                               + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                               + Auspacken() :
                                             ;
                              }

                                                                 Konkrete Schnittstelle


                                                               Jippie!!! Ein

                                                               Tiger!!

   IGeschenk<Tiger>
Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                IGeschenk<        T>

                                                               + Auspacken() : T




                              Auspacken() {
                                                               IGeschenk<Säugetier>
                                  return new()
                                                               + Auspacken() :
                                             ;
                              }

                                                                 Konkrete Schnittstelle




Mittwoch, 25. November 2009
Ein Tierheim um Tiere
                              abzugeben...



Mittwoch, 25. November 2009
Generische Schnittstelle
                                                         ITierheim<   T>

                                                         + Einsperren( T )




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle



                              ITierheim<          >          Da bitte!




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




                                                             Da bitte!



             ITierheim<Tier>
Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




                                                             Da bitte!



IGeschenk<Giraffe>
Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                               ITierheim<     T>

                                                             + Einsperren( T )




                              Einsperren(   ) {
                                                             ITierheim<Säugetier>

                                   ??                        + Einsperren(        )

                              }

                                                               Konkrete Schnittstelle




Mittwoch, 25. November 2009
Ein Tiermarkt zum
                          tauschen von Tieren...



Mittwoch, 25. November 2009
Generische Schnittstelle
                                                          ITiermarkt<T>

                                                         + T Tauschen( T )




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                   ITiermarkt<T>

                                                                 + T Tauschen( T )




                                  Tauschen(    ) {


                                     ??




                                  return

                              }




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                        ITiermarkt<T>

                                                                     + T Tauschen( T )




                                  Tauschen(    ) {
                                                                     ITiermarkt<Säugetier>

                                     ??                          +        Tauschen(          )




                                                                       Konkrete Schnittstelle
                                  return

                              }




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                        ITiermarkt<T>

                                                                     + T Tauschen( T )




                                  Tauschen(    ) {
                                                                     ITiermarkt<Säugetier>

                                     ??                          +        Tauschen(          )




                                                                       Konkrete Schnittstelle
                                  return

                              }




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                   ITiermarkt<T>

                                                                 + T Tauschen( T )




                                  Tauschen(    ) {


                                     ??




                                  return

                              }




Mittwoch, 25. November 2009
Implementierung




                                  Tauschen(   ) {


                                     ??




                                  return

                              }




Mittwoch, 25. November 2009
Implementierung




                                  Tauschen(   ) {


                                     ??




                                  return

                              }




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                      ITiermarkt<in I, out O>

                                                                         + O Tauschen( I )




                                  Tauschen(       ) {                    ITiermarkt<Säugetier,
                                                                              Säugetier>
                                     ??                              +        Tauschen(          )




                                                                           Konkrete Schnittstelle
                                  return

                              }




Mittwoch, 25. November 2009
Generische Schnittstelle
Implementierung                                                      ITiermarkt<in I, out O>

                                                                         + O Tauschen( I )




                                  Tauschen(       ) {                    ITiermarkt<Säugetier,
                                                                              Säugetier>
                                     ??                              +        Tauschen(          )




                                                                           Konkrete Schnittstelle
                                  return

                              }




Mittwoch, 25. November 2009
ITiermarkt<Giraffe, Tier>.Tauschen()                        Ve
                                                                             rer
                          Ab                                                     bu
                               we                                                    ngr
                                 ich                                                       ich
                                       un                                                     tu
                                          g                                                      ng
                                              ITiermarkt<Säugetier, Säugetier>


                                                   Säugetier Tauschen ( Säugetier)




                              Vererbungrichtung


Mittwoch, 25. November 2009
In C# 4 Generische
       Typparameter
       ENTWEDER
       ko- ODER kontravariant
                        ... mit „out“ klassifizierte Typparameter
                        können kovariant abweichen,

                        ... mit „in“ klassifizierte Typparameter
                        können kontravarian abweichen.
Mittwoch, 25. November 2009
Vielen Dank
                              fürs Zugucken!

                                        Lars Corneliussen
                                        lcorneliussen.com
Mittwoch, 25. November 2009

More Related Content

Viewers also liked

SISTEMAS DE INFORMACIÓN "SIG"
SISTEMAS DE INFORMACIÓN "SIG"SISTEMAS DE INFORMACIÓN "SIG"
SISTEMAS DE INFORMACIÓN "SIG"Diana Ortiz Cruz
 
Communiqué de presse : Babyphone Touch Screen
Communiqué de presse : Babyphone Touch ScreenCommuniqué de presse : Babyphone Touch Screen
Communiqué de presse : Babyphone Touch ScreenRomu
 
La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 20154roues
 
Vaiselle corse
Vaiselle corseVaiselle corse
Vaiselle corsesandre07
 
Dia del planeta tierra
Dia del planeta tierraDia del planeta tierra
Dia del planeta tierragarciadomenack
 
Formation analyse des pratiques
Formation analyse des pratiquesFormation analyse des pratiques
Formation analyse des pratiquesAGUILAMANUEL
 
Made In Andenne : présentation socio-économique (BEP)
Made In Andenne : présentation socio-économique (BEP)Made In Andenne : présentation socio-économique (BEP)
Made In Andenne : présentation socio-économique (BEP)CCICONNECT
 
Baurechtsverträge und ihre Tücken
Baurechtsverträge und ihre TückenBaurechtsverträge und ihre Tücken
Baurechtsverträge und ihre Tückenlawmedia
 
Pasos para acceder a la plataforma moodle
Pasos para acceder a la plataforma moodlePasos para acceder a la plataforma moodle
Pasos para acceder a la plataforma moodletutorctm
 
Learning to go - Wissen Time-to-Market - KnowTech 2013
Learning to go - Wissen Time-to-Market - KnowTech 2013Learning to go - Wissen Time-to-Market - KnowTech 2013
Learning to go - Wissen Time-to-Market - KnowTech 2013Torsten Fell
 
E-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in DeutschlandE-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in DeutschlandTertium datur AG
 
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授翔霖 詹
 
Ofpc competences cles
Ofpc competences clesOfpc competences cles
Ofpc competences clesM7saneripar
 

Viewers also liked (19)

SISTEMAS DE INFORMACIÓN "SIG"
SISTEMAS DE INFORMACIÓN "SIG"SISTEMAS DE INFORMACIÓN "SIG"
SISTEMAS DE INFORMACIÓN "SIG"
 
Communiqué de presse : Babyphone Touch Screen
Communiqué de presse : Babyphone Touch ScreenCommuniqué de presse : Babyphone Touch Screen
Communiqué de presse : Babyphone Touch Screen
 
Trabajo en equipo
Trabajo en equipoTrabajo en equipo
Trabajo en equipo
 
La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015
 
APP Y ABP
APP Y ABPAPP Y ABP
APP Y ABP
 
Neumatica 1.1.
Neumatica 1.1.Neumatica 1.1.
Neumatica 1.1.
 
Modelo evaluador y su metodologia
Modelo evaluador y su metodologiaModelo evaluador y su metodologia
Modelo evaluador y su metodologia
 
Vaiselle corse
Vaiselle corseVaiselle corse
Vaiselle corse
 
Tavaux 2015 Mons
Tavaux 2015 MonsTavaux 2015 Mons
Tavaux 2015 Mons
 
Dia del planeta tierra
Dia del planeta tierraDia del planeta tierra
Dia del planeta tierra
 
Formation analyse des pratiques
Formation analyse des pratiquesFormation analyse des pratiques
Formation analyse des pratiques
 
Made In Andenne : présentation socio-économique (BEP)
Made In Andenne : présentation socio-économique (BEP)Made In Andenne : présentation socio-économique (BEP)
Made In Andenne : présentation socio-économique (BEP)
 
Baurechtsverträge und ihre Tücken
Baurechtsverträge und ihre TückenBaurechtsverträge und ihre Tücken
Baurechtsverträge und ihre Tücken
 
Pasos para acceder a la plataforma moodle
Pasos para acceder a la plataforma moodlePasos para acceder a la plataforma moodle
Pasos para acceder a la plataforma moodle
 
Learning to go - Wissen Time-to-Market - KnowTech 2013
Learning to go - Wissen Time-to-Market - KnowTech 2013Learning to go - Wissen Time-to-Market - KnowTech 2013
Learning to go - Wissen Time-to-Market - KnowTech 2013
 
E-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in DeutschlandE-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in Deutschland
 
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授
1204 創業輔導顧問應有之倫理與行為規範-法文版-詹翔霖副教授
 
16 octobre 2011
16 octobre 201116 octobre 2011
16 octobre 2011
 
Ofpc competences cles
Ofpc competences clesOfpc competences cles
Ofpc competences cles
 

Alles Vertragssache - Ko- und Kontravarianz in C# 1-4

  • 1. Alles Vertragssache! Ko- und Kontravarianz in C# Lars Corneliussen itemis AG itemis.de lcorneliussen.com Mittwoch, 25. November 2009
  • 2. Kovarianz und Kontravarianz ist die Unterscheidung, ob ein Aspekt gleichartig der Vererbungsrichtung (kovariant) oder entgegengesetzt zu dieser (kontravariant) ist. Mittwoch, 25. November 2009
  • 4. Varianz = Abweichung Mittwoch, 25. November 2009
  • 5. Ko- und Kontravarianz ... beschreibt die erlaubte Abweichung vom deklarierten Typ. Mittwoch, 25. November 2009
  • 6. object Vererbungrichtung string Mittwoch, 25. November 2009
  • 7. deklarierter Typ Vererbungrichtung object string object meinObjekt = "abcd"; Mittwoch, 25. November 2009
  • 8. deklarierter Typ Vererbungrichtung object string object meinObjekt = "abcd"; Abweichung Mittwoch, 25. November 2009
  • 9. deklarierter Typ Vererbungrichtung object string object meinObjekt = "abcd"; Abweichung kontravariant Mittwoch, 25. November 2009
  • 10. public string Methode( object parameter) { return "Hallo, Welt!"; } object x = Methode( "abc" ); Mittwoch, 25. November 2009
  • 11. deklarierter Typ object public string Methode( object parameter) { return "Hallo, Welt!"; } Vererbungrichtung string object x = Methode( "abc" ); Mittwoch, 25. November 2009
  • 12. deklarierter Typ object public string Methode( object parameter) { return "Hallo, Welt!"; } Abweichung Vererbungrichtung string object x = Methode( "abc" ); Mittwoch, 25. November 2009
  • 13. Variablen und Parameter sind kontravariant ... sie erlauben Zuweisungen von Werten, deren Typen entgegengesetzt zur Vererbungsrichtung abweichen. Mittwoch, 25. November 2009
  • 14. public string Methode( object parameter) { return "Hallo, Welt!"; } object x = Methode( "abc" ); Mittwoch, 25. November 2009
  • 15. deklarierter Typ string public string Methode( object parameter) { return "Hallo, Welt!"; } Vererbungrichtung object object x = Methode( "abc" ); Mittwoch, 25. November 2009
  • 16. deklarierter Typ string public string Methode( object parameter) { return "Hallo, Welt!"; } Vererbungrichtung Abweichung object object x = Methode( "abc" ); kovariant Mittwoch, 25. November 2009
  • 17. Methodenrückgaben sind kovariant ... sie können Variablen zugewiesen werden, deren Typ gleichartig mit der Vererbungsrichtung abweicht. Mittwoch, 25. November 2009
  • 18. Ko- und Kontravarianz in Generics Mittwoch, 25. November 2009
  • 19. IList< object > meineObjekte = new List< string >; Mittwoch, 25. November 2009
  • 20. deklarierter Typ Vererbungrichtung object string IList< object > meineObjekte = new List< string >; Mittwoch, 25. November 2009
  • 21. deklarierter Typ Vererbungrichtung object string IList< object > meineObjekte = new List< string >; Abweichung kontravariant! Fertig!? Mittwoch, 25. November 2009
  • 22. Mit string und object kommen wir nicht weit... Mittwoch, 25. November 2009
  • 23. Tier Säugetier Reptil Mittwoch, 25. November 2009
  • 24. Das Problem bei einer generischen Liste: Mittwoch, 25. November 2009
  • 25. List< > Mittwoch, 25. November 2009
  • 26. List< > IList< > Mittwoch, 25. November 2009
  • 27. List< > Peter IList< > Mittwoch, 25. November 2009
  • 28. List< > Peter Klaus IList< > Mittwoch, 25. November 2009
  • 29. List< > Peter IList< > Mittwoch, 25. November 2009
  • 30. Bis C# 3.0 sind generische Typparameter invariant ... sie können in der Benutzung nicht vom implementierten Typ abweichen. Mittwoch, 25. November 2009
  • 31. C# 4 unterstützt... ... sichere Ko- und Kontravarianz von generischen Typparametern. Mittwoch, 25. November 2009
  • 32. Sehen wir uns mal ein paar Varianten an... Mittwoch, 25. November 2009
  • 33. Ein Tier-Geschenk zum auspacken... Mittwoch, 25. November 2009
  • 34. Generische Schnittstelle IGeschenk< T> + Auspacken() : T Mittwoch, 25. November 2009
  • 35. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 36. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle IGeschenk< > Hoffentlich ein Mittwoch, 25. November 2009
  • 37. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 38. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Hoffentlich ein IGeschenk<Tier> Mittwoch, 25. November 2009
  • 39. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 40. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Jippie!!! Ein Tiger!! IGeschenk<Tiger> Mittwoch, 25. November 2009
  • 41. Generische Schnittstelle Implementierung IGeschenk< T> + Auspacken() : T Auspacken() { IGeschenk<Säugetier> return new() + Auspacken() : ; } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 42. Ein Tierheim um Tiere abzugeben... Mittwoch, 25. November 2009
  • 43. Generische Schnittstelle ITierheim< T> + Einsperren( T ) Mittwoch, 25. November 2009
  • 44. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 45. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle ITierheim< > Da bitte! Mittwoch, 25. November 2009
  • 46. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 47. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Da bitte! ITierheim<Tier> Mittwoch, 25. November 2009
  • 48. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 49. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Da bitte! IGeschenk<Giraffe> Mittwoch, 25. November 2009
  • 50. Generische Schnittstelle Implementierung ITierheim< T> + Einsperren( T ) Einsperren( ) { ITierheim<Säugetier> ?? + Einsperren( ) } Konkrete Schnittstelle Mittwoch, 25. November 2009
  • 51. Ein Tiermarkt zum tauschen von Tieren... Mittwoch, 25. November 2009
  • 52. Generische Schnittstelle ITiermarkt<T> + T Tauschen( T ) Mittwoch, 25. November 2009
  • 53. Generische Schnittstelle Implementierung ITiermarkt<T> + T Tauschen( T ) Tauschen( ) { ?? return } Mittwoch, 25. November 2009
  • 54. Generische Schnittstelle Implementierung ITiermarkt<T> + T Tauschen( T ) Tauschen( ) { ITiermarkt<Säugetier> ?? + Tauschen( ) Konkrete Schnittstelle return } Mittwoch, 25. November 2009
  • 55. Generische Schnittstelle Implementierung ITiermarkt<T> + T Tauschen( T ) Tauschen( ) { ITiermarkt<Säugetier> ?? + Tauschen( ) Konkrete Schnittstelle return } Mittwoch, 25. November 2009
  • 56. Generische Schnittstelle Implementierung ITiermarkt<T> + T Tauschen( T ) Tauschen( ) { ?? return } Mittwoch, 25. November 2009
  • 57. Implementierung Tauschen( ) { ?? return } Mittwoch, 25. November 2009
  • 58. Implementierung Tauschen( ) { ?? return } Mittwoch, 25. November 2009
  • 59. Generische Schnittstelle Implementierung ITiermarkt<in I, out O> + O Tauschen( I ) Tauschen( ) { ITiermarkt<Säugetier, Säugetier> ?? + Tauschen( ) Konkrete Schnittstelle return } Mittwoch, 25. November 2009
  • 60. Generische Schnittstelle Implementierung ITiermarkt<in I, out O> + O Tauschen( I ) Tauschen( ) { ITiermarkt<Säugetier, Säugetier> ?? + Tauschen( ) Konkrete Schnittstelle return } Mittwoch, 25. November 2009
  • 61. ITiermarkt<Giraffe, Tier>.Tauschen() Ve rer Ab bu we ngr ich ich un tu g ng ITiermarkt<Säugetier, Säugetier> Säugetier Tauschen ( Säugetier) Vererbungrichtung Mittwoch, 25. November 2009
  • 62. In C# 4 Generische Typparameter ENTWEDER ko- ODER kontravariant ... mit „out“ klassifizierte Typparameter können kovariant abweichen, ... mit „in“ klassifizierte Typparameter können kontravarian abweichen. Mittwoch, 25. November 2009
  • 63. Vielen Dank fürs Zugucken! Lars Corneliussen lcorneliussen.com Mittwoch, 25. November 2009