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

  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • Motor Trend Channel

    Motor Trend

    11 Mart 2006
  • TomOdellVEVO

    TomOdellVEVO

    29 Mayıs 2012