 <p>When overriding a <code>virtual</code> method, you must keep the original "contract" of the method, which in your case is a <code>string a</code> variable.</p> <p>In order to do what you want, you can create a virtual <em>overload</em> which takes two strings:</p> <pre><code>public class A { public virtual void DoSomething(string a) { // perform something } public virtual void DoSomething(string a, string b) { // perform something } } public class B : A { public override void DoSomething(string a, string b) { // perform something slightly different using both strings } } </code></pre> <p>If what you want is to accept N strings in your method, you can use the <code>params</code> keyword:</p> <pre><code>public class A { public virtual void DoSomething(params string[] allStrings) { // Do something with the first string in the array // perform something } } </code></pre>