Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

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!

  • Be the first to comment

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

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

    Be the first to comment

    Login to see the comments

  • KnorxThieus

    Feb. 11, 2017

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!

Views

Total views

4,047

On Slideshare

0

From embeds

0

Number of embeds

511

Actions

Downloads

14

Shares

0

Comments

0

Likes

1

×