gpt4 book ai didi

C#类使用子类不实现继承的抽象成员报错

转载 作者:行者123 更新时间:2023-11-30 19:28:47 25 4
gpt4 key购买 nike

这是我要编译的 C# 代码相当简单,继承自testDMOBasetestDMO然后测试继承自testBase

public abstract class testDMOBase { }
public class testDMO : testDMOBase { }
public abstract class testBase
{
abstract protected void LoadCRUD(testDMOBase dmo);
}
public class test : testBase
{
override protected void LoadCRUD(testDMO dmo) { }
}

我收到以下错误:

'test' does not implement inherited abstract member 'testBase.LoadCRUD(testDMOBase)' 'test.LoadCRUD(testDMO)': no suitable method found to override

不应该在重写方法上使用子类吗?

最佳答案

Shouldn't the use of a subclass be ok on the override method?

没有。撇开其他不谈,如果调用者提供的实例不是您的子类,您希望调用哪个实现?

testBase t = new test();
t.LoadCRUD(new SomeOtherDMO()); // What would be called here?

您可能会争辩说,能够使用更通用的子类方法覆盖基方法是有意义的(例如,使用父类(super class)的参数> 的原始参数类型,或返回类型是原始返回类型的子类),但 .NET 无论如何都不允许。覆盖方法的参数和返回类型必须完全匹配原始方法,至少在泛型类型参数替换之后。

听起来您可能想要使您的基类型通用:

public abstract class TestBase<T> where T : TestDmoBase
{
public abstract void LoadCrud(T dmo);
}

public class Test : TestBase<TestDmo>
{
public override void LoadCrud(TestDmo dmo)
{
...
}
}

请注意,您也应该遵循 .NET 命名约定 - 即使在示例代码中也是如此。

关于C#类使用子类不实现继承的抽象成员报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com