Your SlideShare is downloading. ×
Alles Vertragssache - Ko- und Kontravarianz in C# 1-4
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,372
views

Published on

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!


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,372
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 3. Aspekt = Typdeklaration 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