quinta-feira, outubro 11, 2007

Chamada a métodos

Com o aproximar do fim do desenvolvimento do projecto Novo Site Optimus tenho tido muito pouco tempo para fazer posts. Contudo ontem deparei com uma situação que me deixou a pensar, e que acho que à primeira vista é difícil responder correctamente, imagine-se o seguinte código:
static void Main(string[] args)
{
  SetError("A");
  SetError("X", "Y");
  SetError("M", "N", "O");
  SetError("G", null);
  SetError("R", null, "S");
  Console.ReadLine();
}

static void SetError(string message, params object[] data)
{
  Console.WriteLine("Message=" + message);
}

static void SetError(string code, string message, params object[] data)
{
  Console.WriteLine("Code=" + code + "; Message=" + message);
}
Qual dos métodos será chamado em cada invocação?

Só a primeira chamada invoca o primeiro método, a segunda, terceira e quinta invocam o 2 método e a quarta dá erro de compilação porque a chamada é ambígua. Isto leva-me a dizer que a assinatura do primeiro método foi mal pensada, não devendo ter o segundo parâmetro, visto que uma chamada com dois ou mais parâmetros, vai invocar o segundo método ou no caso da quarta chamada ainda é pior provocando um erro de compilação.

Sem comentários: