以下代碼顯示使用ref
關鍵字的傳遞參考示例。按值傳遞vs按多態傳遞參考
class Program
{
static void Main(string[] args)
{
int c1 = 10;
ClassC c2 = new ClassC(10);
ClassA a = new ClassB();
a.MethodA(ref c1); Console.WriteLine(c1);
a.MethodB(ref c2); Console.WriteLine(c2.getC());
Console.Read();
}
}
class ClassA //base class
{
public virtual void MethodA(ref int c1)
{
c1 = c1 + 5;
}
public virtual void MethodB(ref ClassC c2)
{
c2.setC(c2.getC() + 5);
}
}
class ClassB : ClassA //ssubclass
{
public override void MethodA(ref int c1)
{
c1 = c1 - 5;
}
public void MethodB(ref ClassC c2)
{
c2.setC(c2.getC() - 5);
}
}
class ClassC //just a class with a variable c with get/set methods
{
protected int c;
public ClassC(int CValue) { c = CValue; }
public void setC(int cnew) { this.c = cnew; }
public int getC() { return c; }
}
如果沒有ref
關鍵字,這將是通過值傳遞和輸出I得到。將10和15
然而,隨着ref
關鍵字,我實際上得到的5的輸出和15!爲什麼沒有引用的代碼指向classA
中的方法,而帶ref的代碼指向classB
中的方法?我猜它必須做多態的事情 - classB
繼承class A
,但你如何解釋它?
閱讀您的編譯器警告;他們告訴你這裏發生了什麼事。 – 2013-04-28 14:44:35