2010-10-18 17 views
5

Tengo una clase C# que se ve un poco como:Asignación de un método IronPython a un C# delegado

public class MyClass 
{ 
    private Func<IDataCource, object> processMethod = (ds) => 
                  { 
                  //default method for the class 
                  } 

    public Func<IDataCource, object> ProcessMethod 
    { 
     get{ return processMethod; } 
     set{ processMethod = value; } 
    } 

    /* Other details elided */ 
} 

y tengo un guión IronPython que se ejecute en la aplicación que se parece a

from MyApp import myObj #instance of MyClass 

def OtherMethod(ds): 
    if ds.Data.Length > 0 : 
     quot = sum(ds.Data.Real)/sum(ds.Data.Imag) 
     return quot 
    return 0.0 

myObj.ProcessMethod = OtherMethod 

Pero cuando se llama a ProcessMethod (fuera de IronPython), después de esta asignación, se ejecuta el método predeterminado.

Sé que el script se ejecuta porque funcionan otras partes del script.

¿Cómo debería estar haciendo esto?

Respuesta

11

he hecho un poco más buscando en Google y encontró una página sobre los rincones más oscuros de IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Lo que debería hacer es la siguiente:

from MyApp import myObj #instance of MyClass 
import clr 
clr.AddReference('System.Core') 
from System import Func 

def OtherMethod(ds): 
    if ds.Data.Length > 0 : 
     quot = sum(ds.Data.Real)/sum(ds.Data.Imag) 
     return quot 
    return 0.0 

myObj.ProcessMethod = Func[IDataSource, object](OtherMethod) 
+0

En respuesta a una entrada antigua, pero no usted también necesito importar el nombre IDataSource de alguna parte para que esto funcione? –

Cuestiones relacionadas