C#是一種類型安全的編程語言(所有表達式都能解析成某個類型的實例,在編譯器生成的代碼中,只會執行對這個類型有效的操作),和非類型安全的語言相比,類型安全的優勢就體現出來了:
1.許多錯誤能在編譯時檢測到,取保代碼在執行它之前是正確的。
2.編譯時語言通常能生成更小,更快的代碼。(在編譯時進行更多的假設,并在IL和元數據中落實那些假設)
為了方便開發人員使用反射或者與基本組件通信,dynamic誕生了!
一下代碼展示了如何利用反射在一個String目標("根據我找類型")上調用一個方法(“Contains”),向它傳遞一個實參(“我只是一個string參數”),并將結果存儲到局部變量result中。
object[] argm = new object[] { arg};
Boolean result=Convert.ToBoolean(method.Invoke(target,argm));
}
dynamic od = 123;//(裝箱)
dynamic os = "dsfsdf";
Int32 ns = os;//運行時報錯。
Int32 nd = od;//從dynamic隱式轉換為int32(拆箱)
//在本例中可看出,dynamic轉為其他類型時,允許省略顯示轉型。
//但是CLR會在運行時驗證轉型,確保類型安全。如果對象類型不兼容要轉換成的類型,clr就會拋出一個InvalidCastException異常。
}
新聞熱點
疑難解答