SORU
18 NİSAN 2010, Pazar


Kovaryans ve contravariance gerçek hayattan örnek

Küçük bir sorun gerçek dünyada kovaryans ve contravariance kullanırdım nasıl anlamakta güçlük çekiyorum.

Şu ana kadar gördüğüm tek örnek aynı eski dizi örnek olmuştur.

object[] objectArray = new string[] { "string 1", "string 2" };

Eğer başka bir yerde kullanıldığını görsem benim gelişimi sırasında kullanmak için izin verecek bir örnek görmek güzel olurdu.

CEVAP
18 NİSAN 2010, Pazar


// Contravariance
interface IGobbler<in T> {
    void gobble(T t);
}

// Since a QuadrupedGobbler can gobble any four-footed
// creature, it is OK to treat it as a donkey gobbler.
IGobbler<Donkey> dg = new QuadrupedGobbler();
dg.gobble(MyDonkey());

// Covariance
interface ISpewer<out T> {
    T spew();
}

// A MouseSpewer obviously spews rodents (all mice are
// rodents), so we can treat it as a rodent spewer.
ISpewer<Rodent> rs = new MouseSpewer();
Rodent r = rs.spew();

Bütünlüğü için...

// Invariance
interface IHat<T> {
    void hide(T t);
    T pull();
}

// A RabbitHat…
IHat<Rabbit> rHat = RabbitHat();

// …cannot be treated covariantly as a mammal hat…
IHat<Mammal> mHat = rHat;      // Compiler error
// …because…
mHat.hide(new Dolphin());      // Hide a dolphin in a rabbit hat??

// It also cannot be treated contravariantly as a cottontail hat…
IHat<CottonTail> cHat = rHat;  // Compiler error
// …because…
rHat.hide(new MarshRabbit());
cHat.pull();                   // Pull a marsh rabbit out of a cottontail hat??

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • mobilenet.cz

    mobilenet.cz

    26 NİSAN 2008
  • PCDIY

    PCDIY

    16 AĞUSTOS 2013