我有一个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()”的方法?
答案 0 :(得分:0)
您要执行的操作是“多重继承”,.Net不允许这样做。
您必须在基类中进行更改或更改每个继承的类。
答案 1 :(得分:-2)
您可以有一个“自定义”类,您可以在其中为Run方法注入所需的行为。
public class CustomAnimal : Animal
{
public Action RunAction { get; set; }
public override void Run()
{
RunAction();
}
}
然后,您只需分配您希望它在运行时调用的内容