quinta-feira, 30 de novembro de 2006

Reflector em .NET

Ontem aprendi algo bastante interessante no .NET
É possivel instanciar classes de outros DLLs utilizando a classe activator.
Aqui vai um exemplo em C#:

ObjectHandle obj1 = Activator.CreateInstanceFrom(@"c:\Teste.dll", "StringBuilder");
StringBuilder r2 = (StringBuilder) obj1.Unwrap();
r2.append("ola");
Console.WriteLine(r2.toString());

Gostei porque é muito mais simples do que a abordagem tradicional de instanciação de variaveis.
É certo que intermente usa reflection, no entanto abstraimo-nos de saber como funciona o reflection ;)

3 comentários:

Unknown disse...

E kem ensinou isso hã?

Essa aproximação é a ideal para quando sabes exactamente que tipo (e em que namespace está) a carregar da assembly.

Unknown disse...

Sim, fiquei bastante satisfeito e surpreendido com a simplicidade da coisa.
Vou experimentar fazer isso para um DLL que esteja na rede, para ver se o Activator suporta passagem de dados pela rede e invocações remotas.
Depois digo o resultado

Unknown disse...

Nunca testei isso, mas sei que existem um namespace System.Remoting.
Provavelmente pode ter alguma coisa a ver...