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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top