En realidad los modificadores ref
y out
de los parámetros de un método también forman parte de lo que se conoce como
signatura del método, por lo que esta clase es válida:
class Sobrecarga
{
public void f(int x)
{}
public void f(out int x)
{}
}
Nótese que esta clase es correcta
porque cada uno de sus métodos tiene una signatura distinta: el parámetro es de
entrada en el primero y de salida en el segundo.
Sin embargo, hay una restricción:
no puede ocurrir que la única diferencia entre la signatura de dos métodos sea
que en uno un determinado parámetro lleve el modificador ref y en el otro lleve
el modificador out.
Por ejemplo, no es válido:
class SobrecargaInválida
{
public void f(ref int x)
{}
public void f(out int x)
{}
}