Pergunta

O que é o seu uso se quando você chamar o método, não pode existir?

Isso significa que você seria capaz de criar dinamicamente um método em um objeto dinâmico?

O que é o uso prático desta?

Foi útil?

Solução

Você não vai realmente ser capaz de criar dinamicamente o método -. Mas você pode obter uma implementação de IDynamicMetaObject (muitas vezes estendendo DynamicObject) para responder como se o método existiu

Usos:

  • Programação contra os objetos COM a API fraco (por exemplo escritório)
  • Chamada em linguagens dinâmicas como Ruby / Python
  • o que poderia tornar objetos "exploráveis" - imagine um XPath-like consulta, mas através de um método / propriedade chama por exemplo document.RootElement.Person[5].Name["Attribute"]
  • Sem dúvida, muitos mais que ainda temos de pensar:)

Outras dicas

Em primeiro lugar, você não pode usá-lo agora. É parte do C # 4, que será lançado em algum momento no futuro.

Basicamente, é para um objeto, cujas propriedades não serão conhecidos até a execução. Talvez se trata de um objeto COM. Talvez seja uma "definir no objeto fly" como você descreve (embora eu não acho que há uma facilidade para criar aqueles ainda ou planejado).

É um pouco como um System.Object, exceto que você tem permissão para chamar métodos que o compilador não sabe sobre, e que os valores de tempo de execução fora como chamar.

As duas coisas grandes eu posso pensar são tipagem pato e a capacidade de usar C # como uma linguagem de script em aplicações, semelhante ao JavaScript e Python . Essa última me faz rasgar um pouco.

Pense nisso como uma forma simplificada de Reflexão. Em vez disso:

object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });

Você recebe a seguinte:

IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);

Eu vejo vários frameworks ORM dinâmica sendo escrito. Ou Parreira escrever um você mesmo.

Eu concordo com Jon Skeet, que você pode ver algumas maneiras interessantes de explorar objetos. Talvez com seletores como jQuery.

Chamar COM e chamando Linguagens Dinâmicas.

Estou ansioso para ver se há uma maneira de fazer um Rubi-like missing_method.

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