2010-09-03 18 views
6

Supposons que je le code suivant:méthode statique à portée IronPython

public static class Foo 
{ 
    public static void Bar() {} 
} 

En IronPython, je voudrais avoir:

Bar() 

Sans avoir à inclure les Foo sur la ligne. Maintenant, je sais que je peux dire:

var Bar = Foo.Bar 
Bar() 

Mais je voudrais ajouter Bar au ScriptScope dans mon code C# en utilisant SetVariable. Comment puis-je faire ceci?

Répondre

9

Créer un délégué à la méthode et définir dans la portée.

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var python = Python.CreateEngine(); 
     var scriptScope = python.CreateScope(); 
     scriptScope.SetVariable("Print", new Action<int>(Bar.Print)); 

     python.Execute(
      "Print(10)", 
      scriptScope 
      ); 
    } 

} 

public static class Bar 
{ 
    public static void Print(int a) 
    { 
     Console.WriteLine("Print:{0}", a); 
    } 
} 
+0

Fonctionne parfaitement. Je pointe mon bonnet vers toi. – Amy