class則是傳參考方式 :
calss宣告時,是產生一塊記憶體存放一個指向該類別的位址。
ex. object one = null;
如果產生new 的實體物件,位址就是指向這個實體物件的位址。
ex. object one = new object();
如果把one當作引數,傳進方法裡面,就等於是把指向實體物件的位址傳進去,
因此該方法改變內容時,實體物件的內容也會跟著改變囉!!!
請看範例 : ^_^
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace 2008
- {
- class Pass
- {
- public static void Value(int param)
- {
- param = 42;
- }
- public static void Reference(WrappedInt param)
- {
- param.Number = 42;
- }
- }
- class WrappedInt
- {
- public int Number;
- }
- class Program
- {
- static void Main(string[] args)
- {
- int i = 0;
- Console.WriteLine(i);
- //參數是傳值,所以會產生一個複製的副本,i依舊是0
- Pass.Value(i);
- Console.WriteLine(i);
- //wi 是指向物件WappedInt的位址
- WrappedInt wi = new WrappedInt();
- Console.WriteLine(wi.Number);
- //wi作為引數,wi的位置會複製給param,也就是兩個位址都是指向同一個物件
- Pass.Reference(wi);
- Console.WriteLine(wi.Number);
- }
- }
- }
沒有留言:
張貼留言