Beginner with c# 3 (轉)

worldblog發表於2007-12-02
Beginner with c# 3 (轉)[@more@]最近很忙,抽空寫了這篇。見諒!王先生該不會又是第一個吧!哈哈

1。3 型別
支援兩種基本的型別:一種是值(value types),一種是引用(reference types)。值包括簡單型別
(char、int、和float),列舉(enum)和結構(struct)。引用包括類(class),介面(interface),
代表(delegate)和陣列陣列(array)。值與引用不同之處在於:值直接它的資料內容;而引用儲存
的引用。是不是粉費解?!打個比方吧。你在某地買了套別墅(好棒噢)。卻從未去過,只知道地址,怎
麼辦?你可以坐計程車,司機看了地址就知道怎樣走不用你操心。你手裡的地址就好像物件的名字,你把
它寫在中,就好像把地址給了司機。司機就是你的,它知道該去哪。你豪華的房子就好比那個
NGWS SDK開發包(82mb噢,夠豪華了!俺的m啊--就這樣燒嘍)。房子裡有你想要的東東,比如你想寫一句
話(i dont like Hello world),就好像上面例子,要用到“WriteLine”。於是,你就給出“WriteLine”
的地址,比如:“Console.WriteLine”。明白?!俺可累了。zzz...  (強打精神)不知道你想到沒有,
值和引用的區別可以引出一個重要特性。值的變數和變數儲存的資料是一一對應的,唯一性。而引用則不
然。引用中不同的變數可以引用同一個物件的例項。當其中一個變數改變例項的值時,其他引用這個例項的
變數也會受到影響(當然,變數本身並沒有改變,即,地址沒變)。瞧,變數只是說明儲存物件的位置(地
址),而不是物件本身。就好像你漂亮的房子被燒了,但你的地址並沒有改變,但地址對應的房子就沒了。
也許是別人也有這個地址,他去燒了你的房子!好了,在給個例子:*/

1: using System;
2: class CValue
3: {
4: public int Value = 0;
5: }
6: class Test
7: {
8: static void Main() {
9: int val1 = 0;
10: int val2 = val1;
11: val2 = 123;
12: CValue ref1 = new CValue();
13: CValue ref2 = ref1;
14: ref2.Value = 123;
15: Console.WriteLine("Values: {0}, {1}", val1, val2);
16: Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
17: }
18: }

/* 下面是輸出的結果:
Values: 0, 123
Refs: 123, 123

啊哈,應該粉清楚了吧。變數val1和變數val2互不影響,它們各自有自己的儲存空間。而ref2複製
了ref1,所以,它們引用了同一個物件的例項。當改變它們其中一個的時候,就會影響到另一個的
值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987287/,如需轉載,請註明出處,否則將追究法律責任。

相關文章