首页 > 解决方案 > C#从基类调用重写的方法

问题描述

我正在覆盖一些现有的代码,但尽量不要触及现有的类。

我有一个基类

public class A {
    public virtual void Func() {
        do something...
    }
}

我有几个其他类正在通过调用 A.Func() 来访问它

我正在写一个扩展类

public class B : A {
    public override void Func() {
        do something else...
    }
}

在不触及基类和那些调用基类的类的情况下,有没有办法将方法 Func() 指向扩展类?

我的意思是当有一个类调用 A.Func() 时,它会执行 B.Func() 而不是 A.Func() 但不会触及该类或 A 类的代码

一个例子

public class C {
    void SomeOutsideFunc()
    {
        var a = new A();
        a.Func(); //in here, is it possible to execute the extended B class's Func()?
    }
}

在上面的示例中,A 类和 C 类禁止任何修改,B 类是 I 编码的扩展类。现在,我必须对 C 类进行另一个覆盖以使事情正常工作我的问题是有很多 C 类型的类(我无法进行任何更改)

tks

标签: c#

解决方案


您可以创建指向子类的基类对象,假设 B.

一个 objA=新 B(); objA.Func();

这将调用派生类的函数。


推荐阅读