轉(zhuǎn)帖|其它|編輯:郝浩|2010-07-28 09:40:35.000|閱讀 626 次
概述:當(dāng)我們得到一個(gè)動(dòng)態(tài)類(lèi)型的對(duì)象時(shí),不管它是來(lái)自COM還是IronPython、HTML DOM還是反射,只需要對(duì)其進(jìn)行操作即可,動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)(DLR)會(huì)幫我們指出針對(duì)特定的對(duì)象以及這些操作的具體意義。這將給我們的開(kāi)發(fā)帶來(lái)極大的靈活性,并且能夠極大程度上地精簡(jiǎn)我們的代碼。本文將與大家一同探討一下C# 4.0中的動(dòng)態(tài)類(lèi)型和動(dòng)態(tài)編程的問(wèn)題。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
C# 4.0的主題就是動(dòng)態(tài)編程(Dynamic Programming)。雖然C#仍然是一種靜態(tài)語(yǔ)言,但是對(duì)象的意義開(kāi)始變得越來(lái)越“動(dòng)態(tài)”。它們的結(jié)構(gòu)和行為無(wú)法通過(guò)靜態(tài)類(lèi)型來(lái)捕獲,或者至少編譯器在編譯程序時(shí)無(wú)法得知對(duì)象的結(jié)構(gòu)和行為。
C#引入了一種新的靜態(tài)類(lèi)型”dynamic”,當(dāng)你擁有了一個(gè)dynamic類(lèi)型的對(duì)象后,你“對(duì)它做的事情”只會(huì)在運(yùn)行時(shí)進(jìn)行解析。設(shè)想我們擁有這樣兩個(gè)類(lèi),分別表示兩種飲料:
public class Coffee
{
public string GetName()
{
return "You selected Maxwell coffee.";
}
}
public class Juice
{
public string GetName()
{
return "You selected orange juice.";
}
}
現(xiàn)在,我們就可以用dynamic類(lèi)型來(lái)表示這兩種飲料。我們寫(xiě)一個(gè)函數(shù)GetDrink(),根據(jù)用戶不同的選擇返回不同的對(duì)象。
static private Object GetDrink(int i)
{
if (i == 1)
{
return new Juice();
}
else // default
{
return new Coffee();
}
}
static void Main(string[] args)
{
Console.WriteLine("Please Select Your Drink: 1 -- Juice; 2 -- Coffee");
int nDrinkType = Console.Read();
dynamic drink = GetDrink( nDrinkType );
Console.WriteLine( drink.GetName() );
}
C#編譯器允許你通過(guò)dynamic對(duì)象調(diào)用任何方法,即使這個(gè)方法根本不存在,編譯器也不會(huì)在編譯的時(shí)候報(bào)編譯錯(cuò)誤。只有在運(yùn)行的時(shí)候,它才會(huì)檢查這個(gè)對(duì)象的實(shí)際類(lèi)型,并檢查在它上面GetName()是什么意思。動(dòng)態(tài)類(lèi)型將使得C#可以以更加統(tǒng)一而便利的形式表示下列對(duì)象:
當(dāng)我們得到一個(gè)動(dòng)態(tài)類(lèi)型的對(duì)象時(shí),不管它是來(lái)自COM還是IronPython、HTML DOM還是反射,只需要對(duì)其進(jìn)行操作即可,動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)(DLR)會(huì)幫我們指出針對(duì)特定的對(duì)象以及這些操作的具體意義。這將給我們的開(kāi)發(fā)帶來(lái)極大的靈活性,并且能夠極大程度上地精簡(jiǎn)我們的代碼。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT168