2010-09-07 13 views
5

¿Alguien sabe si es posible llamar al método del objeto CLR a través del indexador utilizando las funciones dinámicas de lang? Por ejemplo, myClrObj["SuperMethod"]() que puedo hacer fácilmente en javascript.C# indexador dinámico

gracias de antemano.

Respuesta

1

puede haber mejores maneras, pero de una manera que lo sabría cómo hacerlo es:

  • crear una clase que hereda de DynamicObject
  • reemplazar el método adecuado para capturar el acceso a través de indexador
  • Construct y almacenar en caché un delegado que se corresponde con el método que se encuentra a través de la discusión indexador proporcionado
  • Proporcionar un método de extensión que forma adecuada hace que su objeto aparezca más dinámico, con el specializ DynamicObject correcta a instanciada.

    dynamic obj = myObj.AsIndexedObj(); obj["Do"]();

+0

Excelente idea, pero no es adecuada. Tengo clases existentes que no son derivadas dinámicas. – AndrewG

+0

No tiene que derivar sus objetos del DynamicObject. En su lugar, cree algo de un adaptador que interactúe dinámicamente en nombre de su objeto original. Esto tiene la ventaja de que se vuelve reutilizable en muchos tipos de objetos – flq

0

Usted podría utilizar ImpromptuInterfsce disponible a través de Nuget, que envuelve la API DLR para que sea más sencillo para llamar dinámicamente un método por el nombre, funciona tanto para objetos dinámicos y Poco. Más rápido que la reflexión para objetos poco.

Impromptu.InvokeMember(myClrObj,"SuperMethod") 
Cuestiones relacionadas