Parâmetros Opcionais – Inter Assemblies


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.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s