2010-10-18 2 views
5

У меня есть класс C#, который выглядит немного как:Назначение метода IronPython в C# делегат

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

И у меня есть сценарий IronPython, который получает запустить в приложении, которое выглядит как

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 

Но когда вызывается ProcessMethod (за пределами IronPython), после этого назначения запускается метод по умолчанию.

Я знаю, что сценарий запущен, потому что работают другие части скрипта.

Как я должен это делать?

ответ

11

Я сделал некоторые дополнительные Googling и нашел страницу о темных углах IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Что я должен делать это:

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

Ответ на старый пост, но не так ли также нужно импортировать имя IDataSource откуда-нибудь, чтобы это работало? –

Смежные вопросы