Sunrabbit

Kowariancja i kontrawariancja

  • Język oryginalny: Koreański
  • Kraj: Wszystkie krajecountry-flag
  • TO

Utworzono: 2024-11-01

Utworzono: 2024-11-01 01:06

Treść ta jest naturalnie spotykana przez programistów kompilatorów,
osoby korzystające z API kompilatorów,
lub tych, którzy nadużywają systemu typów kompilatora.

To naturalnie pojawiająca się kwestia w naszym życiu programistycznym.


I naturalnie wtapia się w nasze codzienne programowanie.


Uproszczając, jeśli mamy dwa typy, Animal i Dog,

przypisanie Dog do Animal to kowariancjaa

odwrotnieprzypisanie Animal do Dog to kontrawariancja.

Zazwyczaj nie można przypisać Animal do Dog.

Ponieważ z punktu widzenia przeciętnego użytkownika jest to niedopuszczalne,
więc programiści kompilatorów, mając to na uwadze, stosują tylko w niektórych przypadkachkontrawariancję.


Zwykle kontrawariancję stosuje się do wartości wejściowych funkcji, zachowując kowariancję dla wartości wyjściowych.


Dlaczego kontrawariancja jest potrzebna?Można się zastanawiać.

Pozwala to na bardziej elastyczne i polimorficzne podejście do obsługi zdarzeń.

Kowariancja może prowadzić do problemów.


W powyższym kodzie, w miejscu przeznaczone dla Dog, wstawiono Animal, zapewniając elastyczność i uwzględniając polimorfizm.

Gdyby zamiast Animal użyto podtypu Dog, takiego jak Chiwawa, podczas wywoływania obsługi zdarzeń wystąpiłby błąd z powodu braku interfejsu Chiwawa w Dog.


Można by powiedzieć, że skoro używamy typu Animal, to system sam doda podtypy Animal podczas wywoływania funkcji,

co może przypominać przypisanie Dog do Animal.


Zazwyczaj kontrawariancja jest używana dla wartości wejściowych.


Inwariantność, niezmienność


Krótko mówiąc, inwariantność oznacza, że zarówno kowariancja, jak i kontrawariancja są niedozwolone, a niezmienność oznacza, że żadna z nich nie jest dozwolona.

Podsumowanie

Temat ten jest prosty, ale może być również złożony, więc

warto zapoznać się z tym linkiem.




Komentarze0