當我們傳遞的是值類型的引用,那麼程序修改這個引用的內容都會直接反映到這個值上。
傳遞引用類型
傳遞引用類型參數有點類似於前面的傳遞值類型的引用。
public class MyInt {
public int MyValue;
}
public void Go() {
MyInt x = new MyInt();
x.MyValue = 2;
DOSomething(x);
Console.WriteLine(x.MyValue.ToString());
}
public void DOSomething(MyInt pValue) {
pValue.MyValue = 12345;
}
這段代碼做了如下工作:
1.開始調用go()方法讓x變量進棧。
2.調用DOSomething()方法讓參數pValue進棧
3.然後x值拷貝到pValue
這裡有一個有趣的問題是,如果傳遞一個引用類型的引用又會發生什麼呢?
如果我們有兩類:
public class Thing {
}
public class Animal : Thing {
public int Weight;
}
public class Vegetable : Thing {
public int Length;
}
我們要執行go()的方法,如下:
public void Go () {
Thing x = new Animal();
Switcharoo(ref x);
Console.WriteLine(
"x is Animal : "
+ (x is Animal).ToString());
Console.WriteLine(
"x is Vegetable : "
+ (x is Vegetable).ToString());
}
public void Switcharoo (ref Thing pValue) {
pValue = new Vegetable();
}
X的輸出結果:
x is Animal : Falsex is Vegetable : True