var隱式型別
什麼是協變逆變
協變:
和諧的變化,自然的變化
因為黎克特制替換原則父類可以裝子類
所以子類變父類
比如string變成object
感受是和諧的
逆變:
逆常規的變化,不正常的變化
因為黎克特制替換原則父類可以裝子類但是子類不能裝父類
所以父類變子類
比如object 變成string
感受是不和諧的
協變和逆變是用來修飾泛型的
協變: out 逆變: in
作用兩點
out修飾的泛型型別只能作為返回值型別in修飾的泛型型別只能作為引數型別
遵循黎克特制替換原則的 用olt和in修飾的泛型委託可以相互裝載(有父子關係的泛型)
協變父類泛型委託裝子類泛型委託 逆變子類泛型委託裝父類泛型委託
#region 作用
//1.返回值和引數
//用out修飾的泛型只能作為返回值
delegate t testout
<
outt
>()
;//用in修飾的泛型只能作為引數
delegate
void
testin
>
(t t)
;//2.結合黎克特制替換原則理解
class
father
class
son:
father
#endregion
region
//協變 父類總是能被子類替換
//看起來 son -》 father
testout os =()
=>
; testout of = os;
father f =of(
);//實際上返回的是os裡面裝的函式返回的是son
//逆變 父類總是能被子類替換
//看起來像是father- ->son 明明是傳父類但是你傳子類不和諧的
testin if =
(value)=
>
; testin is = if;is(
newson()
);//實際上 呼叫的是if
#endregion
可空型別
#region 可空型別
//值型別是不能賦值為空
//申明時在值型別後面加?可以賦值為空
int? c =3;
//判斷是否為空
if(c.hasvalue)
//相當於是一種語法糖能夠幫助我們自動去判斷o是否為空
//如果是null就不會執行tostring也不會報錯
o?.tostring()
;#endregion
空合併操作符
#region 空合併操作符
//空合併操作符??
//左邊值??右邊值
//如果左邊值為null就返回右邊值否則返回左邊值
// 只要是可以為nu11的型別都能用
int? intv =
null
;int inti = intv ==
null
?100
: intv.value;
console.
writeline
(inti)
;string str =
null
; str = str ?
?"hahah"
; console.
writeline
(str)
;#endregion
#region 內插字串
//關鍵符號: $
//用$來構造字串,讓字串中可以拼接變數
string name =
"唐老師"
;int age =18;
console.
writeline
($"好好學習,,年齡: ");
#endregion
學習位址
b站:【唐老獅】unity系列之c#四部曲—c#高階課程
vue特殊基礎語法
老是記不得特殊地方怎麼處理記錄下。1.傳文字而非引數名稱 2.在物件的key值中使用相關引數的值而不是名字 中括號括起即可 3.父子元件間傳值 4.gulp啟動打包錯誤 primordials is not defined 5.多專案相互關聯,外掛程式關聯 原始碼閱讀 6.vscode摺疊 7.in...
C 基礎語法 特性(3) 物件導向之特殊成員
構造和析構呼叫順序為 基類 父類 建構函式 成員類構造 本類構造 基類構造與繼承順序有關 成員類構造與定義順序有關 本類析構 被包含類析構 基類析構函式 class 類名 類名 參數列 成員1 引數 指標成員2 new型別 型別轉換建構函式 類名 乙個形參 複製建構函式,有2種 一般使用const版...
C 基礎語法
最近開始學習c 程式語言,以前一直使用c c 也只是用到了一些最簡單基礎的用法。為了方便學習,將學習過程中c 語言與c c 不同或不熟悉之處記錄下來,以便日後隨時檢視。本人是通過閱讀 c 入門經典 第6版 學習c 在閱讀過程中隨手作如下記錄。變數在使用之前必須對其進行宣告和初始化。switch每個分...