次のコードは、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
ポリモーフィズム - inheritsで何かをしなければならないと推測してclass A
いますが、どのように説明しますか?