我遇到了以下编译器错误。我不知道为什么我不能获取派生类的引用并将其传递给需要基类引用的方法。请注意,foo()和bar()方法不一定具有相同的语义,因此它们应该具有不同的名称,这些方法不是问题所在。
public class X { public int _x; }
public class Y : X { public int _y; }
public class A {
public void foo( ref X x ) {
x._x = 1;
}
}
public class B : A {
public void bar( ref Y y ) {
foo( ref y ); // generates compiler error
foo( ref (X)y); // wont work either
y._y = 2;
}
}
我找到的唯一解决方案是:
public class B : A {
public void bar( ref Y y ) {
X x = y;
foo( ref x ); // works
y._y = 2;
}
}
我知道在bar()中"y"从未被初始化,但由于它被声明为引用,因此必须在方法外部初始化,所以这不可能是问题的原因。如果您能对此事提供任何启示,将是有帮助的。我相信这只是我对C#理解不够,如果使用转换操作符,这在C++中可以工作。