Neste artigo da nossa série vamos discutir Reflexão e Late Binding. A reflexão fornece a capacidade de analisar e comparar os tipos, enumerar métodos e campos e criar e executar dinamicamente tipos no tempo de processamento. Normalmente, todos os custos de reflexão são altos, algumas operações de reflexão custam muito mais do que outras. Comparar os tipos é o menos dispendioso, enquanto criar e executar dinamicamente são o mais. A técnica de Late Binding usa reflexão interna e é uma operação cara que deve ser evitada em código de desempenho crítico.
Prefira Early Binding e tipos explícitos ao invés de Reflexão
O Visual Basic .NET usa a reflexão implicitamente quando você declara o tipo de objeto. Em C#, você utiliza a reflexão explicitamente. Evite a reflexão sempre que possível, utilizando o Early Binding e declararando tipos explicitamente.
Segue alguns exemplos de onde você usa a reflexão explicitamente em C#:
- Comparações de tipo usando TypeOf, GetType, e IsInstanceOfType;
- Enumeração de Late Binding usando Type.GetFields;
- Execução de Late Binding usando Type.InvokeMember.
Evite Late Binding
O Early binding permite que o compilador identifique o tipo específico necessário e execute as otimizações que são usadas no tempo de execução. Já o Late Binding adia o processo de identificação de tipo até o tempo de execução e requer instruções de processamento extra para permitir a identificação do tipo e a inicialização. O código a seguir carrega um tipo em tempo de execução:
Assembly asm = System.Reflection.Assembly.LoadFrom(“C:\\myAssembly.dll”); Type myType = asm.GetType(“myAssembly.MyTypeName”); Object myinstance = Activator.CreateInstance(myType); This is the equivalent of the following. MyTypeName myinstance = new MyTypeName();
Em alguns casos, você precisa da execução dinâmica de tipos, mas quando o desempenho for fundamental, evite a ligação tardia.
Evite usar System.Object em códigos de desempenho crítico
O tipo de dado System.Object pode representar qualquer valor ou tipo de referência, mas requer chamadas tardias vinculadas para executar métodos e propriedades de acesso. Evite usar o tipo de objeto quando o desempenho do seu código for crítico.
O compilador Visual Basic .NET usa implicitamente a reflexão se você declarar o tipo de objeto:
‘VB.NET Dim obj As Object Set Obj = new CustomType() Obj.CallSomeMethod()
C # não possui esse problema.
Ative as opções Explicit e a Strict em Visual Basic.NET
Por padrão, o Visual Basic. permite códigos late bound. Defina as propriedades Strict e Explicit como verdadeiras para forçar o Visual Basic .NET a não permitir código late bound. No Visual Studio .NET, você pode acessar essas propriedades por meio da caixa de diálogo “Propriedades do projeto”. Se você usar o compilador de linha de comando Vbc.exe para compilar seu código, use /optionexplicit e /optionstrict.
Em nosso próximo artigo vamos discutir as diretrizes do código de segurança Acces.