我需要在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/