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方法上使用子类吗?
不应该在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命名约定 - 即使在示例代码中也是如此.
| 归档时间: |
|
| 查看次数: |
4605 次 |
| 最近记录: |