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

  • MysteryGuitarMan

    MysteryGuita

    16 HAZİRAN 2006
  • Noam Erez

    Noam Erez

    3 NİSAN 2012
  • The Exploiteers

    The Exploite

    4 Ocak 2011