Assegnazione di un metodo IronPython a un delegato C #

Ho una class C # che assomiglia un po ‘a:

public class MyClass { private Func processMethod = (ds) => { //default method for the class } public Func ProcessMethod { get{ return processMethod; } set{ processMethod = value; } } /* Other details elided */ } 

E ho uno script IronPython che viene eseguito nell’applicazione che sembra

 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 ProcessMethod viene chiamato (fuori da IronPython), dopo questo assegnamento, viene eseguito il metodo predefinito.

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

Come dovrei fare questo?

Ho fatto un po ‘di ricerca su Google e ho trovato una pagina sugli angoli più oscuri di IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Quello che dovrei fare è questo:

 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)