【发布时间】:2009-10-29 10:45:08
【问题描述】:
我在下面收到编译器错误。我不知道为什么我不能引用派生类并将其传递给一个引用基类的方法。请注意,方法 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;
}
}
我知道 "y" 从未在 bar() 中初始化,但由于它声明为 ref 本身必须在方法之外初始化,所以这不会是问题。您可以在此问题上提供的任何启发都会有所帮助。我确信这只是我对 C# 缺乏的理解,这将在 C++ 中使用演员表。
【问题讨论】:
-
你为什么首先作为 ref 传递?从您的示例来看,您似乎不需要使用 ref.只需按值传递引用即可。
-
我认为这只是一个非常精简的示例,它展示了问题而不是使用它的完整代码。
-
很像 Johannes,不像是生产代码。 :)
标签: c#