title: Parameter Action<T1, T2, T3> in which T3 can be optional
body: <p>I have the following code:</p>
  
  <pre><code>public static MyMethod()  
  { 
     ...Do something  
     ProtectedMethod(param1, param2);  
     ...Do something  
  }  
  
  protected static void ProtectedMethod(IEnumerable&lt;string&gt; param1, string param2, int param3 = 1)  
  {  
     ... Do something  
  }
  </code></pre>
  
  <p><strong>Take notice of the optional param3 parameter.</strong></p>
  
  <p>Now for quite a few reasons I need to extract the code of the MyMethod method into its own class but I cannot extract ProtectedMethod with it because of all the classes that are inheriting from this one and I need to keep the changes small and isolated. So I figured I could have an Action&lt;> delegate in the new class with the same signature as ProtectedMethod.</p>
  
  <p>The problem is that if I declare the delegate like this:</p>
  
  <pre><code>protected readonly Action&lt;IEnumerable&lt;string&gt;, string, int&gt; m_ProtectedMethod;
  </code></pre>
  
  <p>The extracted code does not like it because it says the method is only being invoked with two parameters.</p>
  
  <p>And if I declare the delegate like so:</p>
  
  <pre><code>protected readonly Action&lt;IEnumerable&lt;string&gt;, string&gt; m_ProtectedMethod;
  </code></pre>
  
  <p>When I send it as a parameter to the new class it does not like it either because the method is defined as having three parameters not two.</p>
  
  <p>So far the only way I have thought of to solve this is to create an overloaded version of  ProtectedMethod to eliminate the optional parameter. </p>
  
  <p>Is this the only option or is there another way of doing it since now the preferred choice is to have optional parameters instead of overloaded methods? </p>