Le C# (comme d'autres langages) autorise la surcharge des méthodes. Cela veut dire que dans une classe, plusieurs méthodes peuvent avoir le même nom tant qu'elles n'ont pas la même signature (la signature est le nombre et le type des différents arguments de la méthode).
Par exemple :
<hr />void MyMethod(int i);
void MyMethod(string s);
void MyMethod(int i, object o);
<hr />
Lorsque le compilateur trouve dans un code un appel à MyMethod, il regarde le nombre et le type des paramètres pour déterminer quelle version (quelle "surcharge") il doit utiliser. Si aucune surcharge ne correspond, il émet le message d'erreur "Aucune surcharge...".
Ainsi, dans le code suivant :
<hr />
int i = 12;
MyMethod(i);
<hr />
le compilateur va comprendre qu'il doit insérer un appel à la première surcharge, qui prend un int en seul paramètre.
En revanche, les appels suivants :
<hr />MyMethod();
MyMethod(12, "test", true);<hr />
échoueraient : le premier car aucune des trois méthodes n'accepte aucun argument, le second car aucune n'accepte trois arguments.