2010-10-18 20 views
5

J'ai une classe C# qui ressemble un peu:Attribution d'une méthode IronPython à un délégué 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 */ 
} 

Et je un script IronPython qui obtient exécuté dans l'application qui ressemble

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 

Mais lorsque ProcessMethod est appelée (en dehors d'IronPython), après cette affectation, la méthode par défaut est exécutée.

Je sais que le script est exécuté car d'autres parties du script fonctionnent.

Comment est-ce que je devrais faire ceci?

Répondre

11

J'ai fait quelques recherches sur Google plus et a trouvé une page sur les coins les plus sombres de IronPython: http://www.voidspace.org.uk/ironpython/dark-corners.shtml

Ce que je devrais faire est la suivante:

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 réponse à un ancien poste, mais ne vous aussi besoin d'importer le nom IDataSource quelque part pour que cela fonctionne? –