Dynamic 動態型別 和雙問號 的使用

2021-06-11 17:56:35 字數 1756 閱讀 3962

1.dynamic關鍵字用於宣告乙個動態物件,然後通過該動態物件去呼叫方法或讀寫屬性。以前我們都是在執行時通過反射,emit,codedom等技術來完成。建立乙個dynamic型別的物件需要使用乙個特殊的構建器叫expandoobject。

dynamic aehyok = new

expandoobject();

aehyok.name = "

aehyok";

aehyok.age = "24"

; aehyok.position = "

asp.net";

console.writeline(

"姓名:

" + aehyok.name + "

年齡:" + aehyok.age +aehyok.position);

console.readkey();

通過控制台執行程式可以檢視執行結果為:

2.通過動態型別來實現基於duck typing的泛型引數約束。

public

static

class

calculator

}

那麼通過呼叫

int i = calculator.add(1, 2

);

double d = calculator.add(1.1, 2.2

);

string s = calculator.add("

abc", "

def"

); console.writeline(i + "

" + d + "

" +s);

console.readkey();

執行後發現

除了運算子過載,對於普通的方法呼叫也是適用的。這種方法是一種動態duck typing的泛型引數約束機制,依賴於執行時的方法查詢,與模板編譯時的檢查不同,它需要使用者保證傳入的物件符合相應要求。

3.dynamicobject類都通過虛方法virtual去「實現」了介面中所有的方法,只要繼承了這個類,讀者可以根據需要「任意」動態覆蓋你要的方法)。

public

class

dynamicanimal : dynamicobject

//如果這個地方返回false 將會引發異常

return

true

; }

}

繼承此類被進行簡單的實現。

接下來我們建立了兩個類。

public

class

duck : dynamicanimal

}public

class

human : dynamicanimal

}

通過控制台應用程式進行呼叫

static

void main(string

args)

public

static

string

doquack(dynamic animal)

}

當然我們在下面定義了乙個靜態的方法傳入dynamic型別,這裡需要去除錯就會明白。其中還有乙個雙問號

4.雙問號的作用:

雙問號(??)是乙個單元運算子,那麼其左右兩邊資料型別必須是相同型別或能**轉換型別的。它表示的意思是,首先檢測左邊的值,若其為null,那麼整個表示式取值為右側的值,否則為左側的值。

解析型別後加問號和雙問號

變數定義中型別後帶乙個問號,意思是這個資料型別是nullable型別的。用於給變數設初值的時候,給變數 int型別 賦值為null,而不是0 例子 int?i 3 等同於nullablei new nullable 3 int?是泛型nullable的另一種寫法。在定義方法的時候允許傳null值 p...

型別後加問號,雙問號的語法

1.變數定義中型別後帶乙個問號,意思是這個資料型別是nullable型別的。用於給變數設初值的時候,給變數 int型別 賦值為null,而不是0 例子 int?i 3 等同於nullablei new nullable 3 int?是泛型nullable的另一種寫法。在定義方法的時候允許傳null值...

dynamic動態型別的理解

動態型別的特點 出現時機 net4.0之後引入新的關鍵字dynamic 用來定義動態型別 使用特點 呼叫動態型別時不做 編譯 檢查,而在程式執行時查詢,如果成員存在且引數正確,就正常執行 asp.net mvc 中的viewbag,就是乙個動態的類 if viewbag.student nuu cl...