मान लिया जाये कि मैं यह सही व्याख्या की है, और कार्रवाई के लिए एक सामान्य प्रतिनिधि, नीचे काम करता है (स्टब्स मैं प्रयोग किया जाता शामिल किए गए हैं) है।
पायथन:
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 रिक्त है। 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
हे, अगर आप जोर देते हैं। सी # कोड को पायथन में कनवर्ट करने का मेरा तरीका सी # को एक .py फ़ाइल में पेस्ट करना था और इसे संकलित किए जाने तक सामान हटा देना था। यह ज्यादातर काम करता था लेकिन दुर्भाग्य से मुझे स्पष्ट बिंदु से विचलित कर दिया कि मुझे सिर्फ एक समारोह घोषित करना चाहिए और इसे पैरामीटर के रूप में पास करना चाहिए। –
चिंता मत करो। मैंने भी यही किया। :) –