В С# кто-то может сделать:
MyClass myInstance = new MyClass();
dynamic mydynamicInstance = myInstance;
И затем вызовите метод, например:
//This method takes a MyClass argument and does something.
Caller.InvokeMethod(myDynamicInstance);
Теперь это приведет к определению типа 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);