C#_協(xié)變與逆變
What(1.出現(xiàn)主要是用來修飾泛型的、只有泛型接口和泛型委托可以使用、遵循里氏替換原則)

out【修飾委托只能作為返回值】
和諧或自然的變化(里氏替換-父類裝載子類)
其變化給我們的感受是合理的

in【修飾委托只能作為參數(shù)】
逆常規(guī)、不正常的變化(里氏替換-子類變成父類)
其變化給我們的感受是不合理的

Why

為開發(fā)者提供便利
提供設計思路

How

【在使用相同類型簽名的泛型委托時,泛型委托實例化的對象可以賦值的前提】
泛型有著繼承關系,不同的泛型委托對象存儲的方法處理的返回值類型不一致時,如果加了out修飾,就可以讓父類型委托存儲子類型委托(有了out就會自動去判斷泛型類型是否有繼承關系)【對返回類型進行了限制】
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。,如果加了in修飾,就可以讓子類型的委托存儲父類型委托(有了in就會自動去判斷泛型類型是否有繼承關系)【對參數(shù)類型進行了限制】
最終存儲的泛型委托類型取決于修飾泛型的修飾符類型,兩個對象自己可以賦值
最終存儲的泛型接口類型取決于修飾泛型的修飾符類型,兩個對象自己可以賦值
標簽: