继承类作为引用

时间:2014-02-25 14:11:56

标签: c# class inheritance polymorphism pass-by-reference

我想使用一个类型为A的参数的函数。我想传递一个派生自A的B类。但是C#不想这样做。

class A
{
 int m_a;
}

class B : A
{
 int m_b;
}

void ShowandEditData( ref A _myvar)
{
 ...
}

现在,我想做这样的事情:

B myB = new B();

ShowandEditData(ref myB);

我尝试了许多内容,例如转换或使用base属性。我想我做错了。

可以用C#做​​到吗?

- 由于伪代码造成混淆而编辑的代码。 (对不起,第一篇文章)

3 个答案:

答案 0 :(得分:6)

只需从方法声明中删除ref即可。像这样:

void ShowData(A _myvar)
{
 ...
}

答案 1 :(得分:2)

您必须在方法调用中使用ref键工作:

ShowData(ref myB);

实际上,中的类是参考值,因此您无需使用ref。仅将ref用于值类型(intshortdoubledecimalboolDateTime等结构。 。)当你真的想要传递参考时。

在您的情况下,您可以使用

object ShowData(A _myvar)
{
 ...
}

答案 2 :(得分:2)

ref关键字doesn't support polymorphicism

如果你可以更改ShowData的签名,那么我建议你改变它:

  public A ShowData(A _myvar)
  {
     return new B();  // Or A() or whatever.
  }

并且这样打电话:

B myB = new B();
myB = ShowData(myB);

或者,您需要为这两个类提供ShowData的重载:

  public void ShowData(ref A _myvar)
  {
     _myvar = new B();
  }

  public  void ShowData(ref B _myvar)
  {
     _myvar = new B();
  }

然后编译器可以选择重载:

     A myA = new A();
     B myB = new B();
     ShowData(ref myB);
     ShowData(ref myA);

顺便说一句,ShowData并不是一个好名字。 MutateData听起来更合适: - )