C# 動(dòng)態(tài)綁定

2018-01-22 17:09 更新

C# 動(dòng)態(tài)綁定

動(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)轉(zhuǎn)化

動(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 vs dynamic

var 使編譯器找出類型。

dynamic
使運(yùn)行時(shí)確定類型。

為了顯示:


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

動(dòng)態(tài)表達(dá)式

字段,屬性,方法,事件,構(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);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)