2011. július 19., kedd

Variancia és kontravariancia

Ma próbálkoztam olyan generikus elem kiválasztó control-t írni wpf-ben, aminek csak átadjuk a metódust, amit meg kell hívni, és magától intézi a lekérdezést, grid bindolást, gridben dupla kattra elem kiválasztást.
A metódust Func-ként adtam át, maga a metódus IList<konkréttípusamiazősbőlszármazik> típust adott vissza.
Amikor meg akartam mondani a property-nek, hogy mi is a fv amit kell majd hívni:
Func<IList<ősvalamiaminekvankulcsa> > DataSourceGetterMethod = proxy.GetAllKonrétTípus;

Erre azt mondta a fordító, hogy neeeem nem, ez nem így megy. Nem nagyon értettem, és ekkor világosítottak fel, hogy ez a kovariancia és a kontravariancia problémája, és hogy IList helyett IEnumerable-el kell próbálkozni, akkor működni fog. És igen, úgy működik, a dependency property-ket szépen be tudom állítgatni.

A problémát magát még nem teljesen értem, itt érdemes lehet utánaolvasgatni:
Covariance and Contravariance in c# 4.0
A C# 4.0 nyelvi újdonságai

Nincsenek megjegyzések:

Megjegyzés küldése