• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Alles Vertragssache - Ko- und Kontravarianz in C# 1-4
 

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

on

  • 2,616 views

Eines der meistbegrüßten Features aus .NET 4 und gleichzeitig eines der am wenigsten verstandenen. Leicht dahergesagt, dass Argumente von Methoden und Delegates schon immer contravariant waren. Und ...

Eines der meistbegrüßten Features aus .NET 4 und gleichzeitig eines der am wenigsten verstandenen. Leicht dahergesagt, dass Argumente von Methoden und Delegates schon immer contravariant waren. Und dass in C# 4.0 jetzt noch sichere Co- und Contravarianz für generische Typparameter hinzukommt. Und weil man das mit Co- und Contra so schnell verwechselt heißt es jetzt einfach "out" und "in". Oder war das andersrum? Nicht ganz sicher? Nach dem Vortrag weißt Du es!

Statistics

Views

Total Views
2,616
Views on SlideShare
2,294
Embed Views
322

Actions

Likes
0
Downloads
11
Comments
0

6 Embeds 322

http://startbigthinksmall.wordpress.com 312
http://www.slideshare.net 4
http://web.archive.org 2
https://www.linkedin.com 2
http://webcache.googleusercontent.com 1
http://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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