【发布时间】:2014-04-18 01:16:19
【问题描述】:
在 C++ 中,我们可以这样做(伪代码):
class A {
public:
virtual void a(A a)=0;
}
class B : A {
public:
virtual void a(B b);
}
但是当我用 C# 编写等价物时:
public abstract class A
{
public virtual void a(A a){}
}
public class B : A
{
public override void a(B b){}
}
编译器给出一个错误,说 B.a 不会覆盖 A.a。为什么 C# 不允许这样做?允许这种做法是非常合理的,因为它遵循多态性原则。
【问题讨论】:
-
你能给出一个 C# 代码示例来说明你正在尝试做什么吗?
-
对不起,代码中的错误。
-
我认为更好的 C# 等价物应该让类 'A' 是一个接口,而不是一个抽象类 - 这应该会给你你想要的行为。
-
@DaveDoknjas 将
A设为接口根本不会影响错误。 -
@sepp2k:它在我的测试中有效——将“A”设为接口,然后“B”实现“A”。这提供了 VictorPrograss 提到的行为 - 指向“B”的“A”引用调用“B”中定义的方法。
标签: c# c++ inheritance compiler-errors polymorphism