|
1。3 類型 c#支持兩種基本的類型:一種是值(value types),一種是引用(reference types)。值包括簡單類型 (char、int、和float),枚舉(enum)和結(jié)構(gòu)(struct)。引用包括類(class),界面(interface), 代表(delegate)和數(shù)組陣列(array)。值與引用不同之處在于:值直接存儲(chǔ)它的數(shù)據(jù)內(nèi)容;而引用存儲(chǔ)對象 的引用。是不是粉費(fèi)解?!打個(gè)比方吧。你在某地買了套別墅(好棒噢)。卻從未去過,只知道地址,怎 么辦?你可以坐出租車,司機(jī)看了地址就知道怎樣走不用你操心。你手里的地址就好像對象的名字,你把 它寫在程序中,就好像把地址給了司機(jī)。司機(jī)就是你的編譯器,它知道該去哪。你豪華的房子就好比那個(gè) NGWS SDK開發(fā)包(82mb噢,夠豪華了!俺的m啊--就這樣燒嘍)。房子里有你想要的東東,比如你想寫一句 話(i dont like Hello world),就好像上面例子,要用到“WriteLine”。于是,你就給出“WriteLine” 的地址,比如:“Console.WriteLine”。明白?!俺可累了。zzz... (強(qiáng)打精神)不知道你想到?jīng)]有, 值和引用的區(qū)別可以引出一個(gè)重要特性。值的變量和變量存儲(chǔ)的數(shù)據(jù)是一一對應(yīng)的,唯一性。而引用則不 然。引用中不同的變量可以引用同一個(gè)對象的實(shí)例。當(dāng)其中一個(gè)變量改變實(shí)例的值時(shí),其他引用這個(gè)實(shí)例的 變量也會(huì)受到影響(當(dāng)然,變量本身并沒有改變,即,地址沒變)。瞧,變量只是說明存儲(chǔ)對象的位置(地 址),而不是對象本身。就好像你漂亮的房子被燒了,但你的地址并沒有改變,但地址對應(yīng)的房子就沒了。 也許是別人也有這個(gè)地址,他去燒了你的房子!好了,在給個(gè)例子:*/
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: }
/* 下面是輸出的結(jié)果: Values: 0, 123 Refs: 123, 123
啊哈,應(yīng)該粉清楚了吧。變量val1和變量val2互不影響,它們各自有自己的存儲(chǔ)空間。而ref2復(fù)制 了ref1,所以,它們引用了同一個(gè)對象的實(shí)例。當(dāng)改變它們其中一個(gè)的時(shí)候,就會(huì)影響到另一個(gè)的
|