使用子类的C#类没有实现继承的抽象成员错误

Ron*_*ien 2 c# inheritance overriding

这是我试图编译的c#代码相当简单, 继承自testBase testDMO继承的testDMOBaseThen测试

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) { }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'test'没有实现继承的抽象成员'testBase.LoadCRUD(testDMOBase)''test.LoadCRUD(testDMO)':找不到合适的方法来覆盖

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

Jon*_*eet 5

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

号除了别的,你会想到,如果调用者提供一个实例被称为其实施其他比你的子类?

testBase t = new test();
t.LoadCRUD(new SomeOtherDMO()); // What would be called here?
Run Code Online (Sandbox Code Playgroud)

您可能会认为能够使用更通用的子类方法覆盖基本方法是有意义的(例如,使用参数是原始参数类型的超类,或者返回类型是子类的子类)原始的返回类型)但.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)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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