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當然我們在下面定義了乙個靜態的方法傳入dynamic型別,這裡需要去除錯就會明白。其中還有乙個雙問號void main(string
args)
public
static
string
doquack(dynamic animal)
}
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...