Q:今天我的侄子問我1+1等於多少,我說當然是2咯,他很狡猾的笑著說我錯了,然後我問他為什麼錯,他瞄了我一眼說:“根本無法確定一個唯一的答案,在數學上你可以很確定的說是2,不過我並沒有限定范圍喲!”那一瞬間我想個傻子被他嘲弄了一番。
A:哈哈。看來你的侄子的確聰明過人。沒錯,沒有限定范圍,我們當然無法給出一個確定的答案,這也跟我們今天的話題——類型和類型系統有關。
Q:不會吧?跟我們的C#話題有關??怎麼個有關法?
A:嗯,這樣吧,我問你,要使得1+1的結果有效,我們至少要為這兩個“1”限定一些什麼條件?
Q:他們應該具有可加性。
A:在具體一點!
Q:嗯,他們應該是同一類別的。
A:對!非常對!就是同一類別,我們總不能要求一個蘋果加上一台風扇會有滿意的唯一的結果吧!同樣的道理,我們要使得相關的式子在電腦上有效,至少我們要限定每一個被操作的因子都是可以歸為某一個類別的。這就導出了類型(Type)。
Q:那麼,這個跟C#的類型有什麼聯系呢?
A:這樣吧,我們不說1+1了,我們說說你老婆每個月的家庭財政管理工作。我敢肯定,你老婆不會愚蠢到把數字跟物品混在一起計算收支的情況,她肯定會把相關的物品先進性換算,而實際上,我們每個人在處理財務工作的時候,都統一使用以貨幣為單位的數字,對嗎?假如你這個月收入10000元,支出5000元,那麼你可以很快地得出結論,你們這個月有5000元可以存入銀行。但這等事怎麼在電腦裡,我的意思是在C#裡面表達呢?電腦沒有我們那麼聰明,知道10000-5000=5000,因為它不能夠從這個簡單的式子裡面知道這些數字是什麼類型的。於是,我們就要首先告訴他這些數字的類型!
Q:那麼,我們怎麼告訴C#這些額外的信息呢?
A:這個很簡單,我們計算的時候有小數的吧,在電腦裡面叫做浮點數,我們只要告訴電腦,這些是浮點數,再告訴他這條式子,它就會給出結果我們的了。別的不說,我們先來看看代碼:
double inComing = 10000.00;
double outGoing = 5000.00;
double result = inComing - outGoing;
然後你得到的result就是算出的結果:5000了。
Q:這些inComing、outGoing、result等,是什麼來的?double又是什麼來的?
A:首先,double是指雙精度浮點數,你目前知道它是一種精度高的浮點數就行了,與它對應的是精度低的單精度浮點數float。而inComing、outGoing、result這三個東西是變量(Variable)。變量是用來儲存信息的,以便我們後面的操作使用的。上面的代碼就等於先告訴電腦:我這個月的收入是10000元,支出是5000元,我現在要你給我計算出我這個月剩下多少錢。
Q:噢,我明白了。那麼,上面的代碼可以運行嗎?
A:還不行,因為這個僅僅是一個代碼片斷,不過要運行的話,我們只需要把這個片斷跟之前的HelloWorld結合一下就行了,結合後的代碼是:
class PrintResult
{
static void Main()
{
double inComing = 10000.00;
double outGoing = 5000.00;
double result = inComing - outGoing;
System.Console.WriteLine(result);
}
}
還記得System.Console.WriteLine(...);這句話嗎,它的作用就是用來向命令行界面輸出東西的,這次我們不輸出Hello, World! 而改為輸出result。現在,你把這個代碼保存為PrintResult.cs,然後去到命令行提示符,轉到PrintResult.cs所在目錄鍵入csc PrintResult.cs進行編譯,最後鍵入PrintResult運行一下!
Q:好,我明白了,不過我有一個問題想問問,為什麼HelloWorld程序和我老婆的財務工作加起來?他們同一類型的嗎?:)
A:-_- ...