C# 動態(tài)綁定

2018-01-22 17:09 更新

C# 動態(tài)綁定

動態(tài)綁定會將類型,成員和操作的解析過程從編譯時延遲到運行時。

使用上下文關(guān)鍵字 dynamic 聲明動態(tài)類型:


dynamic d = GetSomeObject();
d.OneMethod();

動態(tài)類型期望 d 的運行時類型具有OneMethod 方法。

由于d是動態(tài)的,編譯器會將OneMethod綁定到d,直到運行時。

動態(tài)轉(zhuǎn)化

動態(tài)類型具有來自所有其他類型的隱式轉(zhuǎn)換:


int i = 7;
dynamic d = i;
long j = d; // No cast required (implicit conversion)

要使轉(zhuǎn)換成功,動態(tài)對象的運行時類型必須可隱式轉(zhuǎn)換為目標(biāo)靜態(tài)類型。

以下示例會拋出RuntimeBinderException,因為int不能隱式轉(zhuǎn)換為short:


int i = 7;
dynamic d = i;
short j = d; // throws RuntimeBinderException

var vs dynamic

var 使編譯器找出類型。

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)類型可以是動態(tài)的:


dynamic x = "hello";
var y = x; // Static type of y is dynamic
int z = y; // Runtime error

動態(tài)表達式

字段,屬性,方法,事件,構(gòu)造函數(shù),索引器,運算符和轉(zhuǎn)換都可以動態(tài)調(diào)用。

涉及動態(tài)操作數(shù)的表達式通常本身是動態(tài)的:


dynamic x = 2;
var y = x * 3; // Static type of y is dynamic

將動態(tài)表達式轉(zhuǎn)換為靜態(tài)類型會生成靜態(tài)表達式:


dynamic x = 2;
var y = (int)x; // Static type of y is int

構(gòu)造函數(shù)調(diào)用總是產(chǎn)生靜態(tài)表達式。

在此示例中,x靜態(tài)類型為StringBuilder:


dynamic capacity = 1;
var x = new System.Text.StringBuilder (capacity);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號