.net默認參數
時間:2023-03-28 18:46:02 | 來源:營銷百科
時間:2023-03-28 18:46:02 來源:營銷百科
.net默認參數:C#是靜態(tài)強類型語言。而在很多情況下,提供'動態(tài)'行為,是常常發(fā)生的事情,例如通過反射在運行時訪問.NET類型、調用動態(tài)語言對象、訪問COM對象等,都無法以靜態(tài)類型來獲取。因此, C# 4.0引入的又一個全新的關鍵字dynamic,也同時引入了改善靜態(tài)類型與動態(tài)對象的交互能力,這就是動態(tài)查找(Dynamic Lookup)例如:
public static void Main() {
dynamic d = GetDynamicObject();
d.MyMethod(22); // 方法調用
d.A = d.B; // 屬性賦值
d['one'] = d['two']; //索引器賦值
int i = d 100; // 運算符調用
string s = d(1,2); // 委托調用
}
就像一個object可以代表任何類型,dynamic使得類型決斷在運行時進行,方法調用、屬性訪問、委托調用都可動態(tài)分派。同時,動態(tài)特性還體現在構建一個動態(tài)對象,在C# 4.0實現IDynamicObject接口的類型,可以完全定義動態(tài)操作的意義,通過將C#編譯器作為運行時組件來完成由靜態(tài)編譯器延遲的操作,例如:
dynamic d = new Foo();
string s;
d.MyMethod(s,3,null);
在具體執(zhí)行過程中,C#的運行時綁定器基于運行時信息,通過反射獲取d的實際類型Foo,然后在Foo類型上就MyMethod方法進行方法查找和重載解析,并執(zhí)行調用,這正是動態(tài)調用的背后秘密:DLR。在.NET 4.0中將引入重要的底層組件DLR(Dynamic Language Runtime,動態(tài)語言運行時),除了實現動態(tài)查找的基礎支持,DLR也同時作為基礎設施為類似于IronRuby、IronPython這樣的動態(tài)語言提供統(tǒng)一的互操作機制??偠灾?,動態(tài)編程將為C#在以下領域產生巨大的變革:
· Office編程與其他COM交互。
·動態(tài)語言支持,在C#中消費IronRuby動態(tài)語言類型將并非難事,體驗動態(tài)語言特性指日可待。
· 增強反射支持。
以調用IronRython為例,我們只需引入IronPython.dll,IronPython.Modules.dll,and Microsoft.Scripting.dll,即可通過創(chuàng)建ScriptRuntime在C#中HostingIronPython環(huán)境,進而來操作動態(tài)語言的類型信息。
ScriptRuntime py = Python.CreateRuntime();
dynamic mypy = py.UseFile('myfile .py');
Console.WriteLine(mypy.MyMethod('Hello'));
雖然從微軟當前提供的技術資料和CTP演示中,動態(tài)查找還存在或多或少的問題,但是在'動態(tài)'大行其道的今天,我們無法回避也必須擁抱這個未來的主角,因為我堅信明天會更好。