Home > Nieuws > Twice Experts speak > .NET Framework 4.0: Taalverbeteringen - deel 1

.NET Framework 4.0: Taalverbeteringen - deel 1

In het .NET Framework worden vaak kreten gebruikt waarbij een ontwikkelaar zich helemaal niets meer kan voorstellen. Twice docent Patrick Schmidt licht een aantal begrippen toe in een serie van vier artikelen.


Taalvernieuwingen in het .NET Framework 4.0.  - deel I Covariantie

Deel 1 uit een serie artikelen van Patrick Schmidt, docent en consultant bij Twice IT Training

 

In het .NET Framework worden vaak kreten gebruikt waarbij een ontwikkelaar zich helemaal niets meer kan voorstellen. Covariantie is er daar één van. In dit eerste deel zal ik proberen dit begrip te verduidelijken. 

Stel, je hebt de volgende hiërarchie:
interface IProduct
{
    string Merk { get; }
}
   class Melk : IProduct
{
    public string Merk { get { return "Melk"; } }
}
 
Vervolgens definiëren we de methode:
void ToonProduct(IProduct product) {…}
 
Met de volgende aanroep zullen ontwikkelaars in het algemeen weinig  moeite hebben:
Melk  product = new Melk();
ToonProduct(product);
Ofschoon ToonProduct gedefinieerd is met een argument van type IProduct kunnen we hem aanroepen met een object van het type Melk. Dit komt doordat Melk de interface IProduct implementeert. “Vanzelfsprekend”, zullen een aantal mensen nu wel denken, maar bekijk nu de volgende methode en de aanroep:
void ToonProducts(IEnumerable <IProduct> product) {…}
IEnumerable <Melk> products = new List<Melk>();
ToonProducts(products);
 
Dit kan dus niet omdat IEnumerable<Melk> een ander type is dan IEnumerable <Product>. in oudere versies van het .NET Framework is IEnumerable <Product> invariant. Om dit probleem te verhelpen, is het begrip Covariantie ingevoerd. Dit gedrag wordt in de code aangegeven door het woordje “out” en kan alleen op generieke interfaces en delegates worden toegepast. Microsoft heeft in het .NET Framework 4.0 een aantal interfaces hierop aangepast. Eén daarvan is de interface IEnumerable<> die nu als volgt is gedefinieerd:
 interface IEnumerable<out T> : IEnumerable
 IEnumerable is nu variant geworden waardoor de eerdere aanroep wel is toegestaan.  Deze vorm van variantie  noemen we Covariant.
 

Lees ook deel II - Contravariant

 

Terug naar het overzicht met alle artikelen over Taalvernieuwingen in het .NET Framework 4.0

 
 
Onvang het laatste Twice nieuws in uw inbox, meldt u aan voor onze nieuwsbrief