在C#中,有人可以这样做:
MyClass myInstance = new MyClass();
dynamic mydynamicInstance = myInstance;
Run Code Online (Sandbox Code Playgroud)
然后,调用一个方法,如:
//This method takes a MyClass argument and does something.
Caller.InvokeMethod(myDynamicInstance);
Run Code Online (Sandbox Code Playgroud)
现在,这将导致在运行时确定myInstance类型,如果它有效,Caller.InvokeMethod将正常调用.
现在,我的问题是,如果这被认为是一种不好的做法dynamic,特别是在以下情况下:
1)InvokeMethod使用内部反射实例化myDynamicInstance类型的另一个实例.
2)有一个抽象基类MyBaseClass和它的许多子类,包括MyBaseClass.如果我们InvokeMethod为所有这些派生类提供了许多重载方法,我们是否可以使用它来在运行时允许类型确定,然后通过方法重载(或对该类方法调用的后期绑定)进行适当的调用)?:
public abstract class MyBaseClass {/*...*/}
public class MyClass : MyBaseClass {/*...*/}
public class MyAnotherClass : MyBaseClass {/*...*/}
MyBaseClass myBaseClassRef = new MyClass();
dynamic myDynamicInstance = myBaseClassRef;
Caller.InvokeMethod(myDynamicInstance);
Run Code Online (Sandbox Code Playgroud)