W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
動(dòng)態(tài)綁定會(huì)將類型,成員和操作的解析過(guò)程從編譯時(shí)延遲到運(yùn)行時(shí)。
使用上下文關(guān)鍵字 dynamic
聲明動(dòng)態(tài)類型:
dynamic d = GetSomeObject();
d.OneMethod();
動(dòng)態(tài)類型期望 d
的運(yùn)行時(shí)類型具有OneMethod
方法。
由于d是動(dòng)態(tài)的,編譯器會(huì)將OneMethod綁定到d,直到運(yùn)行時(shí)。
動(dòng)態(tài)類型具有來(lái)自所有其他類型的隱式轉(zhuǎn)換:
int i = 7;
dynamic d = i;
long j = d; // No cast required (implicit conversion)
要使轉(zhuǎn)換成功,動(dòng)態(tài)對(duì)象的運(yùn)行時(shí)類型必須可隱式轉(zhuǎn)換為目標(biāo)靜態(tài)類型。
以下示例會(huì)拋出RuntimeBinderException,因?yàn)閕nt不能隱式轉(zhuǎn)換為short:
int i = 7;
dynamic d = i;
short j = d; // throws RuntimeBinderException
var
使編譯器找出類型。
使運(yùn)行時(shí)確定類型。dynamic
為了顯示:
dynamic x = "hello"; // Static type is dynamic, runtime type is string
var y = "hello"; // Static type is string, runtime type is string
int i = x; // Runtime error
int j = y; // Compile-time error
用 var
聲明的變量的靜態(tài)類型可以是動(dòng)態(tài)的:
dynamic x = "hello";
var y = x; // Static type of y is dynamic
int z = y; // Runtime error
字段,屬性,方法,事件,構(gòu)造函數(shù),索引器,運(yùn)算符和轉(zhuǎn)換都可以動(dòng)態(tài)調(diào)用。
涉及動(dòng)態(tài)操作數(shù)的表達(dá)式通常本身是動(dòng)態(tài)的:
dynamic x = 2;
var y = x * 3; // Static type of y is dynamic
將動(dòng)態(tài)表達(dá)式轉(zhuǎn)換為靜態(tài)類型會(huì)生成靜態(tài)表達(dá)式:
dynamic x = 2;
var y = (int)x; // Static type of y is int
構(gòu)造函數(shù)調(diào)用總是產(chǎn)生靜態(tài)表達(dá)式。
在此示例中,x靜態(tài)類型為StringBuilder:
dynamic capacity = 1;
var x = new System.Text.StringBuilder (capacity);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: