C 基礎 特殊語法

2021-10-25 20:29:58 字數 2373 閱讀 6109

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每個分...