winstont77 / winstont77.github.io

0 stars 0 forks source link

2024/05/21/Covariance-Contravariance-where/ #3

Open utterances-bot opened 3 months ago

utterances-bot commented 3 months ago

協變與逆變(Covariance and contravariance) | Hanna & Ruby & Bru鼠 可愛動物區

前言: 最近開始做Side Project的時候,在使用中介者模式時遇到協變與逆變的設計,因為是第一次遇到不得不暫停專案的腳步停下來研究,但在過程中也獲益良多。是時候和阿冠以及腦袋分享我的收穫了。 先弄懂父類和子類: 開始講協變與逆變之

http://winstont77.github.io/2024/05/21/Covariance-Contravariance-where/

CHI-KEKE commented 3 months ago

查了一下Covariance 好像源自於數學概念

"Covariance in probability theory and statistics is a measure of the joint variability of two random variables" 表示兩個變數 X 和 Y 的變化方向的關係

但在C#是在描述繼承關係中的子類別可以被視為父類型使用,其實與數學上的概念不是一樣的 所以一直記不起來它的意義

看完之後我理解的方式一句話說

今天我們想要設計一個 interface 他可以接受 interface 變成他,並且使用一些查詢有關的方法,所以我造了一個 Interface ,並且用 " out "告訴編譯器,我同意只用來傳回值這個約定,請放心交給我吧,不要給我紅色蚯蚓

看了一下 IQueryable 也是

CHI-KEKE commented 3 months ago

到底在滿分什麼

winstont77 commented 3 months ago

我自己對協變印象比較深刻的就是滿足SOLID的里式替換原則,畢竟之前在研究SOLID五大設計原則的時候,一直對於里式替換原則的概念很抽象,沒有找到實際例子說明。

winstont77 commented 3 months ago

今天我們想要設計一個 interface 他可以接受 interface 變成他,並且使用一些查詢有關的方法,所以我造了一個 Interface ,並且用 " out "告訴編譯器,我同意只用來傳回值這個約定,請放心交給我吧,不要給我紅色蚯蚓 以程式碼來看確實是這樣理解,既完整也比較簡單俐落,