动态更改类调用路径?



在下面的代码中,是否可以通过使用字符串a和b更改OtherClass1来动态调用MyFunction() ?

string a = "OtherClass1", b = "OtherClass2";
myClass = new MyClass();
myClass.OtherClass1.MyFunction();

像这样:

myClass.a.MyFunction();

试图动态更改它,但不知道如何…

虽然有可能用反射来解决这个问题,但我不建议这样做,特别是不适合刚开始编程的人。您选择退出编译器将为您提供的各种保护,并且大大增加了错误的风险。但是如果你真的想搬起石头砸自己的脚,你可以查看使用反射从字符串获取属性值和如何调用带参数的方法。

我的建议是让这两个类共享一个接口,并使用一个可枚举对象来选择其中一个:

public enum MyClasses{
Class1,
Class2
}
public IMyClass GetClass(MyClasses obj){
return obj switch{
MyClasses.Class1 => OtherClass1,
MyClasses.Class2 => OtherClass2,
_ => throw new InvalidOperationException();
}
}

然后可以用 调用

myClass.GetClass(a).MyFunction();

最好从一开始就避免这个问题,但是这种模式在某些情况下是有用的。您可以将枚举替换为字符串,但这将再次增加出现错误和bug的机会。最好在某个输入层将字符串解析为enum,这样可以在一个地方完成所有数据验证,使其余代码更可靠。

最新更新