C# - Late Binding e Early Binding


 Neste artigo vou apresentar os conceitos de late binding e early binding na linguagem C#.

É quase certo que você já ouviu ou já viu os termos late binding e early binding em vídeos ou textos pela web.

Qual o conceito por trás destes termos e como eles atuam na linguagem C# ?

Vamos começar pelo conceito...

Early Binding (Vinculação Antecipada)

Significa que o compilador conhece o tipo de objeto, seus métodos e as propriedades que ele contém, ou seja, as informações sobre o objeto, método, classe, etc, são encontradas em tempo de compilação. Assim, quando você usa um objeto o Intellisense usa o early binding para preencher suas propriedades, métodos, eventos, etc, exibindo-as.

Late Binding (Vinculação Tardia)

Significa que o compilador não reconhece e não sabe o tipo de objeto que esta sendo usado, também não conhece os métodos, propriedades, eventos, etc. que o objeto contém. O tipo do objeto não é determinado em tempo de compilação. As informações sobre o objeto serão procuradas em tempo de execução.

A linguagem C#, e a maioria das linguagens compiladas utiliza o Early Binding enquanto que as linguagens de Scripts, como JavaScript, usa o Late Binding.

Você pode usar o Late Binding na linguagem C# usando a API Reflection que compila o código e procura pelo nome das funções através dos assemblies em tempo de execução.

Nota:  A partir da versão 4.0 a linguagem C# deu suporte ao Late Binding introduzindo a palavra-chave dynamic.

Como Early Binding e Late Binding afetam o desempenho

A vinculação geralmente tem um efeito no desempenho.

Assim, como a Late Binding vai precisar localizar informações sobre objetos em tempo de execução, isso significa que as chamadas de métodos são mais lentas do que Early Binding que obtém todas as informações em tempo de compilação.

Quando você trabalhar com objetos que contenham métodos virtuais, o compilador irá gerar uma v-table ou tabela v, que é essencialmente uma matriz que contém os endereços dos métodos virtuais. Todo objeto que tenha um método virtual conterá um membro oculto gerado pelo compilador que é o endereço da tabela v.

Quando um método virtual for chamado, o compilador irá descobrir qual é a posição do método apropriado na tabela v. Em seguida, ele gerará código para procurar nos objetos v-table e chamar o método virtual nesta posição. Isso otimiza o código em tempo de execução.

Early Binding versus Late Binding

Uma aplicação será executada mais rapidamente usando Early Binding, uma vez que nenhuma operação de boxing e unboxing será realizada.

É mais fácil escrever o código com Early Binding pois temos a ajuda do Intellisense que preenche automaticamente e exibe as propriedades, métodos, eventos do objeto em tempo de compilação.

Usando a Early Binging a sintaxe é verifica em tempo de compilação o que produz uma quantidade menor de erros.

Com Early Binding o compilador pode garantir que o objeto existe antes da aplicação ser executada e que será executado.

A Late Binding teria suporte em todas as versões de uma aplicação pois tudo é decidido em tempo de execução.

A Late Binding produz um impacto menor no código em futuros aprimoramentos.

A Late binding faz chamadas de função que permite chamar uma nova substituição para um método em vez de chamar o método de base existente.

Conclusão

Tanto Early Binding como Late Binding possuem méritos e deméritos, cabe a você como desenvolvedor conhecer bem o conceito e saber tirar proveito deles dependendo do cenário no qual esta atuando.

Até o próximo artigo C#.

"E esta é a mensagem que dele ouvimos, e vos anunciamos: que Deus é luz, e não há nele trevas nenhumas. "
1 João 1:5

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti