私はこの権利を解釈し、Actionは汎用代理人であると仮定すると、以下のものが使用されます(私が使用したスタブは含まれています)。
の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);
}
}
}
私は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)
何らかの理由で、私は時に働いていることを覚えていないものの
私は最初に試しました...
*失敗*試行のいくつかをリストしますか? 私は皆あなたの*失敗*から学ぶことができると確信しています。 (http://www.codinghorror.com/blog/archives/000576.html) – Sung
あなたが主張するならば、ちょっと。 C#コードをPythonに変換する私のアプローチは、C#を.pyファイルに貼り付け、コンパイルするまで削除していました。これは主に機能しましたが、残念なことに、私は関数を宣言してパラメータとして渡す必要があるという明確な点から私を邪魔しました。 –
心配しないでください。私も同じことをしました。 :) –