c#.我可以自动替换派生类而不是基类吗?

本文关键字:基类 我可以 替换 派生 | 更新日期: 2023-09-27 18:18:21

语言为c#。
假设我重写了A类中的方法

    class A:B
    {
        protected override void Method(BaseClass bc)
        {
            (DerivedClass)bc.DerivedClassField = blabla;
        }
    }

是否有任何库/语言功能/等使用,我可以写以下内容:

    class A:B
    {
        protected override void Method(BaseClass bc)
        {
            bc.DerivedClassField = blabla;
        }
    }
例如,通过向类A添加一些属性或其他方法来

?

c#.我可以自动替换派生类而不是基类吗?

您可以使用泛型以类型安全的方式完成此操作:

class A<T> where T : BaseClass {
    protected virtual void Method(T bc) { ... }
}
class B : A<DerivedClass> {
    protected override void Method(DerivedClass bc) {
        bc.DerivedClassField = blabla;
    }
}

,但这可能会导致其他问题,如果你甚至想使用A<T>不知道T,在这种情况下,我将使用强制转换(如果类结构意味着强制转换不会失败)或重新定义您的对象模型。

你可以将bc转换为DerivedClass,如果你确定它是什么。

class A:B
{
    protected override void Method(BaseClass bc)
    {
        ((DerivedClass)bc).DerivedClassField = blabla;
    }
}