2010-10-18 19 views
5

Ho un # di classe C che sembra un po 'come:Assegnazione di un metodo di IronPython a un C# delegato

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 */ 
} 

E io ho uno script IronPython che viene eseguito in applicazione che assomiglia

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 

Ma quando viene chiamato ProcessMethod (fuori da IronPython), dopo questo assegnamento, viene eseguito il metodo predefinito.

So che lo script viene eseguito perché altre parti dello script funzionano.

Come devo fare?

risposta

11

ho fatto qualche ulteriore usare Google e ho trovato una pagina sugli angoli più oscuri della IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Cosa dovrei fare è questa:

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

Risposta a un vecchio post, ma non è vero anche bisogno di importare il nome IDataSource da qualche parte per farlo funzionare? –

Problemi correlati