title: Is the use of dynamic considered a bad practice?
body: <p>In C#, someone can do:</p>
  
  <pre><code>MyClass myInstance        = new MyClass();
  dynamic mydynamicInstance = myInstance;
  </code></pre>
  
  <p>And then, invoke a method, like:</p>
  
  <pre><code>//This method takes a MyClass argument and does something.
  Caller.InvokeMethod(myDynamicInstance);
  </code></pre>
  
  <p>Now, this will lead to determination of the myInstance type at runtime,
  and, if it is valid, the <code>Caller.InvokeMethod</code> will be called normally.</p>
  
  <p>Now, my question is if this is considered a bad practice to use <code>dynamic</code>, especially in the following cases:</p>
  
  <p>1) <code>InvokeMethod</code> instantiates another instance of myDynamicInstance type,
  using reflection inside.</p>
  
  <p>2) There is  an abstract base class <code>MyBaseClass</code> and a number of subclasses of it, including <code>MyBaseClass</code>. If we have a number of overloaded methods of <code>InvokeMethod</code> for all of those derived classes, could we use it in order to allow at runtime the type determination and then the proper invocation via method overloading (or late binding on the call of a method of that class)?:</p>
  
  <pre><code>public abstract class MyBaseClass         {/*...*/}
  public class MyClass        : MyBaseClass {/*...*/}
  public class MyAnotherClass : MyBaseClass {/*...*/}
  
  MyBaseClass myBaseClassRef = new MyClass();
  dynamic myDynamicInstance  = myBaseClassRef;
  
  Caller.InvokeMethod(myDynamicInstance);
  </code></pre>