2010-10-18 7 views
5

Mam klasy C#, który wygląda trochę jak:Przypisywanie metodę IronPython do C# delegata

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

I mam skryptu IronPython, który zostanie uruchomiony w aplikacji, która wygląda jak

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 

Po wywołaniu ProcessMethod (poza IronPythonem), po tym przypisaniu uruchamiana jest metoda domyślna.

Wiem, że skrypt jest uruchamiany, ponieważ działają inne części skryptu.

Jak powinienem to robić?

Odpowiedz

11

zrobiłem kilka dalszych googlowanie i znaleźć stronę o ciemniejszych zakątkach IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Co powinienem robić to:

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

Odpowiadając na starym stanowisku, ale prawda również musisz zaimportować nazwę IDataSource skądś, żeby to zadziałało? –