Suponiendo que haya interpretado este derecho, y Action es un delegado genérico, a continuación funciona (los stubs que utilicé están incluidos).
Python:
import clr
clr.AddReference("IronPythonDelegates")
import IronPythonDelegates
def camActionPy(camera, time):
print "Camera: " + str(camera) + ", time: " + str(time)
IronPythonDelegates.CameraAnimation(camActionPy);
CSharp:
namespace IronPythonDelegates
{
public class Camera{}
public class CameraAnimation
{
private System.Action<Camera, float> animation;
public CameraAnimation(System.Action<Camera, float> animation)
{
this.animation = animation;
this.animation(new Camera(), 1.5f);
}
}
}
corregí lo anterior para utilizar System.Action, y ya no requiere una reflexión explícita. Aunque es un poco extraño Por alguna razón, pude construir un delegado creada por el usuario como:
explicitTestAction = IronPythonDelegates.TestAction[IronPythonDelegates.Camera, System.Single](camActionPy);
IronPythonDelegates.CameraAnimation(explicitTestAction);
pero no podía hacerlo con System.Action. P.ej. con
explicitSystemAction = System.Action[IronPythonDelegates.Camera, System.Single](camActionPy)
IronPythonDelegates.CameraAnimation(explicitSystemAction);
explicitSystemAction es nulo. TestAction se acaba de definir como:
public delegate void TestAction<T1, T2>(T1 one, T2 two);
Pero, afortunadamente, de cualquier manera está bien simplemente hacer:
CameraAnimation(System.Action)
o
CameraAnimation(TestAction)
aunque por alguna razón que no recuerdo que el trabajo cuando Lo intenté por primera vez ...
¿Haría una lista de los intentos de * failure *? Estoy seguro de que todos podemos aprender de su * falla *. (http://www.codinghorror.com/blog/archives/000576.html) – Sung
Heh, si insiste. Mi enfoque para convertir el código C# a Python era pegar C# en un archivo .py y eliminar cosas hasta que se compilara. Esto funcionó en su mayoría, pero desafortunadamente me distrajo del punto bastante obvio de que debería declarar una función y pasarla como parámetro. –
No te preocupes. Yo hice lo mismo. :) –