私がこの権利を解釈し、アクションが一般的なデリゲートであると仮定すると、以下が機能します (私が使用したスタブが含まれています)。
パイソン:
import clr
clr.AddReference("IronPythonDelegates")
import IronPythonDelegates
def camActionPy(camera, time):
print "Camera: " + str(camera) + ", time: " + str(time)
IronPythonDelegates.CameraAnimation(camActionPy);
Cシャープ:
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);
}
}
}
System.Action を使用するように上記を修正したところ、明示的なリフレクションは不要になりました。ちょっと変ですけどね。何らかの理由で、次のようなユーザー作成のデリゲートを作成できました。
explicitTestAction = IronPythonDelegates.TestAction[IronPythonDelegates.Camera, System.Single](camActionPy);
IronPythonDelegates.CameraAnimation(explicitTestAction);
System.Action ではできませんでした。例えば
explicitSystemAction = System.Action[IronPythonDelegates.Camera, System.Single](camActionPy)
IronPythonDelegates.CameraAnimation(explicitSystemAction);
explicitSystemAction が null です。TestAction は次のように定義されました。
public delegate void TestAction<T1, T2>(T1 one, T2 two);
しかし、幸いなことに、次のようにするだけで問題ありません。
CameraAnimation(System.Action)
また
CameraAnimation(TestAction)
どういうわけか、最初に試したときの動作を覚えていません...