【发布时间】:2019-09-11 21:43:52
【问题描述】:
我正在构建游戏的源代码,并尝试使用重载方法和默认参数调用基本虚拟函数。我无法更改派生的类,并且需要在我自己的虚方法类定义中调用该函数。我会尝试用代码更详细的解释。
首先,我们有一个基类 A,它定义了一个名为 Foo 的虚函数,它接受一个参数。
class A
{
public virtual string Foo(int a)
{
return "Class A Function 1 par";
}
}
然后是一个 B 类,它覆盖 Foo 并使用两个新的默认参数为 Foo 定义一个新的重载虚函数。
class B : A
{
public virtual string Foo(int a, int b = 0, int c = 0)
{
return "Class B Function 3 par";
}
public override string Foo(int a)
{
return "Class B Function 1 par";
}
}
然后是我需要派生的类,C。它只是覆盖了一个参数 Foo。
class C : B
{
public override string Foo(int a)
{
return "Class C Function 1 par";
}
}
最后是我的 D 类,它也覆盖了一个参数 Foo 但也需要能够调用 Foo 的基本方法。
class D : C
{
public override string Foo(int a)
{
return base.Foo(0);
}
}
这导致调用 B 中定义的三个参数 Foo(返回为“Class B Function 3 par”),但我想调用 C 中定义的 Foo(将返回“Class C Function 1 par”)。我认为这种带有默认参数的虚函数重载会导致一个模棱两可的编译器错误,但它编译得很好。
有没有办法解决这个问题,如果没有,为什么它允许类的结构阻止我访问基本方法?
【问题讨论】:
标签: c# inheritance overriding overloading virtual