我需要在C#中执行类似的操作。但是在Exec(object)中出现编译错误。

public class ParentClass { }
public class class1 : ParentClass
{
}
public class class2 : ParentClass
{
}
public class class3 : ParentClass
{
}

public class MasterClass
{
    public void ExecutionMethod(ParentClass myObject)
    {
        //some code
        Exec(myObject);
        //some code
    }

    public void Exec(class1 obj)
    {
        //some code
    }
    public void Exec(class2 obj)
    {
        //some code
    }
    public void Exec(class3 obj)
    {
        //some code
    }
}


我用反射解决了,但我认为一定是更好的方法,有人可以给我一个好主意

最佳答案

正如@ScottChamberlain在评论中指出的那样,您没有任何采用ParentClass类型参数的方法。

看一下Liskov substitution principle-如果您已经正确实现了实现,则可以将例如class1的实例替换为ParentClass的实例,但是反之则不成立。

奇怪的是,无论如何您都不需要(或想要)重载。只需将ParentClass用作具有所有子类都必须实现的抽象Execute方法的抽象类,即可直接在该类上调用Execute而不用担心重载。更好的是,只需将ParentClass设置为接口。 (顺便说一下,有时也称为Strategy Pattern)。

public interface IParent {
  void Execute();
}

public class class1 : ParentClass {
   //Execute method implementation
}

public class class2 : ParentClass {
   // ...
}

public class class3 : ParentClass {
  // ....
}

public class MasterClass
{
    public void ExecutionMethod(IParent myObject)
    {
        //some code
        myObject.Execute();
        //some code
    }
}

关于c# - C#类依赖注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43375560/

10-11 22:32