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

  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • Jared Busch

    Jared Busch

    25 Mayıs 2011