是否可以在不修改派生类的情况下覆盖虚拟方法?

时间:2019-02-18 12:25:12

标签: c#

我有一个dll文件,其中包括从基类继承的各种派生类,并且此基类具有一个名为“ Run”的虚拟方法,并且在派生类中没有覆盖的“ Run”方法。现在,在特定情况下,方法Run的行为发生改变,我想申请所有派生类,因此,如果要更改该行为,通常我必须创建各种自定义派生类类,这些类继承自派生类并覆盖“运行”方法。如果派生类的数量很多并且会导致源重复,那将是很麻烦的。请注意,我没有权限修改该dll文件中的任何现有文件。

dll文件:

public abstract class Animal
{
    public virtual void Run()
    {
        Console.WriteLine("Hello 1");
    }
}

public class Dogs : Animal
{
    //do other thing.
}

public class Cat : Animal
{
    //do other thing.
}

标称客户端:

public class CusTomDogs : Dogs
{
    public override void Run()
    {
        Console.WriteLine("Hello 2");
    }
}

public class CusTomCat : Cat
{
    public override void Run()
    {
        Console.WriteLine("Hello 2");
    }
}

是否可以在不创建自定义每个派生类的情况下更改行为“ base.Run()”的方法?

2 个答案:

答案 0 :(得分:0)

您要执行的操作是“多重继承”,.Net不允许这样做。

您必须在基类中进行更改或更改每个继承的类。

答案 1 :(得分:-2)

您可以有一个“自定义”类,您可以在其中为Run方法注入所需的行为。

public class CustomAnimal : Animal
{
    public Action RunAction { get; set; }

    public override void Run()
    {
        RunAction();
    }
}

然后,您只需分配您希望它在运行时调用的内容