¿El uso de la dinámica se considera una mala práctica?

En C #, alguien puede hacer:

MyClass myInstance        = new MyClass();
dynamic mydynamicInstance = myInstance;

Y luego, invoque un método, como:

//This method takes a MyClass argument and does something.
Caller.InvokeMethod(myDynamicInstance);

Ahora, esto conducirá a la determinación del tipo myInstance en tiempo de ejecución y, si es válido, elCaller.InvokeMethod será llamado normalmente.

Ahora, mi pregunta es si esto se considera una mala práctica para usardynamic, especialmente en los siguientes casos:

1)InvokeMethod crea una instancia de otra instancia del tipo myDynamicInstance, utilizando la reflexión en el interior.

2) Hay una clase base abstractaMyBaseClass y una serie de subclases de la misma, incluyendoMyBaseClass. Si tenemos varios métodos sobrecargados deInvokeMethod para todas esas clases derivadas, ¿podríamos usarlo para permitir en el tiempo de ejecución la determinación del tipo y luego la invocación adecuada mediante la sobrecarga del método (o enlace tardío en la llamada de un método de esa clase) ?:

public abstract class MyBaseClass         {/*...*/}
public class MyClass        : MyBaseClass {/*...*/}
public class MyAnotherClass : MyBaseClass {/*...*/}

MyBaseClass myBaseClassRef = new MyClass();
dynamic myDynamicInstance  = myBaseClassRef;

Caller.InvokeMethod(myDynamicInstance);

Respuestas a la pregunta(2)

Su respuesta a la pregunta