.NET

Hernán MF hernan en orgmf.com.ar
Vie Ene 20 16:44:04 CET 2006


> Hernán, dime por favor como le puedo pasar a C# un nombre de una
> función Python para que la ejecute, sin usar Python.Runtime....

Tienes que pasar la función Python como un delegado que es lo
entiende C#.

Si tuvieras una clase C# definida como:

    namespace miscosas {
        public delegate void MiDelegado();
        public class miclase {
            public void metodo(MiDelegado del) {
                del();
            }
        }
    }

desde Python.NET podrías hacer:

    >>> from CLR.miscosas import miclase
    >>> from CLR.miscosas import MiDelegado
    >>>
    >>> def x():
    ...     print "hola"
    ...
    >>>
    >>> xDelegado = MiDelegado(x)
    >>>
    >>> c = miclase()
    >>> c.metodo(xDelegado)
    hola
    >>>

La clave está en "xDelegado = MiDelegado(x)" que
convierte al unbound python method x en un
delegado de C#.  La invocación puede ser
asincrónica, no hace falta ejecutarla en el
momento de pasarle el objeto.

> ... Hasta ahora todo lo que me dijiste va de maravilla.

Me alegro.

>
> Un saludo,
> Catalin

-H.




Más información sobre la lista de distribución Python-es