Beginner with c# 3 (轉)
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,所以,它們引用了同一個物件的例項。當改變它們其中一個的時候,就會影響到另一個的
值。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Beginner with C# (轉)C#
- Beginner with c# 5 (轉)C#
- Beginner with c# 6 (轉)C#
- Beginner with c# 2 (轉)C#
- Beginner with c# 4 (轉)C#
- Beginner with c# 7 (轉)C#
- VB程式設計師眼中的C# 3 (轉)程式設計師C#
- 使用 C# 和 ONNX 來玩轉Phi-3 SLMC#
- QT beginner QFileDialogQT
- 一個POP3客戶端的C#類 (轉)客戶端C#
- WHAT IS C# (轉)C#
- 轉載:在c#中使用sqlite的3種自定義函式C#SQLite函式
- Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)
- C#:Dictionary轉DataTableC#
- 可怕的 C# (轉)C#
- C#聊天程式 (轉)C#
- C# 和 API (轉)C#API
- C#問答 (轉)C#
- c# DataTable轉ListC#
- C# 操作xml(轉)C#XML
- AtCoder Beginner Contest 360
- AtCoder Beginner Contest 343
- AtCoder Beginner Contest 344
- AtCoder Beginner Contest 345
- AtCoder Beginner Contest 346
- atcoder beginner 346 題解
- 【AtCoder Beginner Contest 347】
- AtCoder Beginner Contest 348
- AtCoder Beginner Contest 347
- AtCoder Beginner Contest 349
- AtCoder Beginner Contest 363
- AtCoder Beginner Contest 364
- AtCoder Beginner Contest 365
- AtCoder Beginner Contest 361
- AtCoder Beginner Contest 361)
- AtCoder Beginner Contest 362
- AtCoder Beginner Contest 366
- AtCoder Beginner Contest 369