SORU
2 ŞUBAT 2010, Salı


Fark arasındaki Kovaryans & Contra-varyans

Sorun kovaryans ve contravariance arasındaki farkı anlama yaşıyorum.

CEVAP
4 ŞUBAT 2010, PERŞEMBE


Soru "kovaryans ve contravariance arasındaki fark nedir?"

Kovaryans ve contravariance özellikleri vardırbir eşleştirme ortakları, başka bir set, bir üye işlev. Daha spesifik olarak, bir eşleme açısından kovaryant veya karşıtı olabilirilişkibu sette.

Tüm C kümesi aşağıdaki iki alt kümelerini düşünün# tür. İlk:

{ Animal, 
  Tiger, 
  Fruit, 
  Banana }.

İkincisi, bu açıkça kümesi ile ilgili

{ IEnumerable<Animal>, 
  IEnumerable<Tiger>, 
  IEnumerable<Fruit>, 
  IEnumerable<Banana> }

Bir yoktureşlemeikinci sete ilk setten operasyon. Yani, ilk sette her T içinilgiliikinci sette türüdür IEnumerable<T>. Ya da, kısa form, eşleme T → IE<T>.

Benimle o kadar uzağa?

Şimdi bir düşünelimilişki. Bir yokturatama uyumluluk ilişkisiilk sette tür çiftleri arasında. Tiger türünde bir değişken bu tür olduğu söyleniyor yani Animal, atanabilir türünde bir değer"". atama uyumlu "X türünde bir değişken Y atanabilir türünde bir değer" daha kısa bir formda: 14**. yazalım İlk kümede, burada tüm atama uyumluluk ilişkiler:

Tiger  ⇒ Tiger
Tiger  ⇒ Animal
Animal ⇒ Animal
Banana ⇒ Banana
Banana ⇒ Fruit
Fruit  ⇒ Fruit

C belirli arabirimleri kovaryant atama uyumluluğu destekleyen# 4, ikinci sette tür çiftleri arasında atama uyumluluk bir ilişki vardır:

IE<Tiger>  ⇒ IE<Tiger>
IE<Tiger>  ⇒ IE<Animal>
IE<Animal> ⇒ IE<Animal>
IE<Banana> ⇒ IE<Banana>
IE<Banana> ⇒ IE<Fruit>
IE<Fruit>  ⇒ IE<Fruit>

Eşleme T → IE<T> dikkat edinkorur atama uyumluluk varlığını ve yön. Bu, X ⇒ Y, sonra IE<X> ⇒ IE<Y> da doğrudur.

Belirli bir ilişkisi açısından bu özelliği olan bir eşleme denir "kovaryant eşleştirme". Bu anlamlı: Kaplanlar dizisi Hayvanlar dizisi tabi, ama bunun tersi doğru değildir. kullanılabilir Hayvanlar dizisi mutlaka Kaplanlar dizisi gerektiğinde kullanılamaz.

Kovaryans. Şimdi düşünün tüm türleri kümesi bu alt:

{ IComparable<Tiger>, 
  IComparable<Animal>, 
  IComparable<Fruit>, 
  IComparable<Banana> }

şimdi üçüncü ilk set T → IC<T> kümesinden eşleştirme var.

C# 4:

IC<Tiger>  ⇒ IC<Tiger>
IC<Animal> ⇒ IC<Tiger>     Backwards!
IC<Animal> ⇒ IC<Animal>
IC<Banana> ⇒ IC<Banana>
IC<Fruit>  ⇒ IC<Banana>     Backwards!
IC<Fruit>  ⇒ IC<Fruit>

Bu eşleme T → IC<T> vardırvarlığını korumuş ama tersineatama uyumluluk. Yani, eğer X ⇒ Y IC<X> ⇐ IC<Y>.

Bir eşlemekorur ama tersine çevirirbir ilişki denirkarşıtıeşleme.

Yine, bu açıkça doğru olması gerekir. İki Hayvan karşılaştırabilirsiniz olan bir cihaz ayrıca, iki Kaplan, iki Kaplanlar karşılaştırmak olamaz, mutlaka bir iki Hayvan karşılaştırabilirsiniz olan bir cihaz karşılaştırabilirsiniz.

Bu kovaryans arasındaki fark ve C contravariance# 4. Kovaryanskorurassignability yönünde. Contravariancetersine çevirir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackmillMusic

    BlackmillMus

    3 Kasım 2010
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • TROPFEST

    TROPFEST

    27 Mart 2007