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