com dinâmica, reflexo estranho não mais?
-
03-07-2019 - |
Pergunta
C dynamic
palavra-chave # 4.0 introduz, que vai olhar para cima em tempo de execução.
Isso significa que vamos precisar reflexão estranho não mais? Se não, você pode mostrar-se um exemplo disso?
Solução
Ainda teremos Reflexão -. Usando 'dinâmica' contra objetos CLR regulares irá invocar um despachante baseada em Reflection
Assim -. Ainda teremos Reflexão, mas vai ser mais fácil de fazer
Aqui está um exemplo:
// Via 'dynamic'
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;
// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);
Eu não sei sobre você, mas eu como o primeiro. =)
Em ambos os casos, eu recebo nenhuma verificação de tempo de compilação, não Intellisense, não há suporte IDE -. Mas o primeiro caso é muito mais expressivo do que o último
Outras dicas
expedição dinâmica é apenas um possível uso de Reflexão. Existem muitas boas razões para interrogar uma classe para a sua estrutura, obter informações sobre essa estrutura e visualizar de uma forma ou agem sobre ele, de alguma forma, sem membros já acessam dinamicamente. Reflexão está aqui para ficar. :)
Se você quiser exemplos da palavra-chave dinâmica, aqui está um vídeo de PDC de o próprio homem falar sobre isso (e outras coisas C # 4.0 relacionado).
Dinâmica irá percorrer um longo caminho para resolver problemas com métodos conhecidos apenas pelo nome, onde esse nome é conhecido e fixado em tempo de compilação - mas, é claro, esses métodos também podem ser expressas como interfaces se você controlar os tipos
Há casos em que dynamic
não ajudaria em tudo:
- onde o nome do método não é conhecida em tempo de compilação (isto é, que é carregado a partir da entrada de configuração / utilizador)
- criação do objeto
- talvez alguns genéricos cenários
Os maiores usos que vejo para dynamic
são:
- interoperabilidade (obviamente)
- suporte do operador genérico
- pato digitação, onde não há nenhuma interface comum
- DLR interoperabilidade (ver comentários)
Mas definitivamente não resolve todos os ai reflexão.