Em uma aplicação qualquer, suponhamos WinForms temos um Class Library contendo as suas funções que serão utilizadas neste projeto. Em sua aplicação WinForms faz-se a referencia a este Class Library para poder consumir as funções. Algumas das funções tem um ou mais parametros opcionais, ou seja, parametros que nao precisam ser obrigatoriamente informados, mas devem ter um valor padrão. Seria algo mais ou menos como o código abaixo:
Public Class Settings
Public Function GetInfo(Optional ByVal i As Integer = 3) As String
Return i.ToString()
End Function
End Class
Pois bem, agora consumindo, terei que fazer a referencia a este Class Library em minha aplicação. Feito a referencia, basta invocar o metodo:
Module Module1
Sub Main()
Dim x As New Settings
Console.WriteLine(x.GetInfo())
‘Output: 3
Console.ReadLine()
End Sub
End Module
Bem, tudo ocorre como o esperado, sendo retornado o valor 3 para a aplicação. Bem, mas chega em um dia qualquer e lhe é pedido para alterar o valor padrão do teu parametro adicional, no nosso caso o parametro “i” do nosso metodo “GetInfo(…)”. Então, altera-se de 3 para 8, compila este Assembly e copia o arquivo DLL gerado para a pasta “bin” da nossa aplicação WinForms. E qual o resultado? Por incrível que pareça, 3 novamente.
Como podem ver, mesmo copiando a nova DLL já com o novo valor, o valor não é alterado, isso porque quando compilamos a nossa aplicação, o valor padrão que informamos na assinatura do método já é passado quando invocamos o método “GetInfo(…)”. Veja como fica o Dissasembler:
<STAThread> _
Public Shared Sub Main()
Dim settings1 As Settings = New Settings
Console.WriteLine(settings1.GetInfo(3))
Console.ReadLine
End Sub
Veja então agora porque mesmo alterando o nosso Class Library a nossa aplicação ainda fica com o valor “antigo”.
Tinha esta dúvida porque uma vez na lista da PontoNetPT (há algum tempo já), o meu Amigo João Paulo Carreiro havia dito que os parametros opcionais em “Inter Assemblies” eram “perigosos” e não havia entendido o porque isso. Hoje, com um tempo livre pude pedir esta explicação a ele, e realmente vi que realmente são lá um bocado perigosos.