【发布时间】:2013-04-21 20:03:38
【问题描述】:
以下代码显示了使用ref 关键字的引用传递示例。
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 关键字,它将按值传递,我得到的输出将是 10 和 15。
但是,使用 ref 关键字,我实际上得到了 5 和 15 的输出!为什么不带ref的代码指向classA中的方法,而带ref的代码指向classB中的方法?我猜它与多态性有关——classB 继承了class A,但你如何解释呢?
【问题讨论】:
-
阅读编译器警告;他们正在告诉你这里发生了什么。
标签: c# polymorphism pass-by-reference pass-by-value