एक उत्कृष्ट सवाल।
जहां तक मुझे पता है, डेल्फी के वर्तमान संस्करण में ऐसा करना संभव नहीं है। यह बहुत दुर्भाग्यपूर्ण है क्योंकि उन अज्ञात प्रक्रियाओं को ऑब्जेक्ट के ईवेंट हैंडलर को तेज़ी से स्थापित करने के लिए बहुत अच्छा होगा, उदाहरण के लिए जब xUnit प्रकार के स्वचालित परीक्षण ढांचे में परीक्षण फिक्स्चर सेट अप करते हैं।
1:
वहाँ CodeGear इस सुविधा को लागू करने के लिए दो तरीके से किया जाना चाहिए गुमनाम तरीकों के निर्माण के लिए अनुमति दें। कुछ ऐसा:
Button1.OnClick := procedure(sender : tobject) of object begin
...
end;
यहां समस्या यह है कि अज्ञात विधि के लिए स्वयं सूचक के रूप में क्या रखना है। कोई उस ऑब्जेक्ट के स्वयं पॉइंटर का उपयोग कर सकता है जिससे अज्ञात विधि बनाई गई थी, लेकिन फिर कोई ऑब्जेक्ट संदर्भ से केवल अज्ञात विधियां बना सकता है। अज्ञात विधि को रखने के लिए दृश्यों के पीछे एक डमी ऑब्जेक्ट बनाना एक बेहतर विचार हो सकता है।
2: वैकल्पिक रूप से, कोई ईवेंट प्रकारों को प्रक्रियाओं और प्रक्रियाओं को स्वीकार करने की अनुमति दे सकता है, जब तक वे परिभाषित हस्ताक्षर साझा करते हैं। इस तरह आप ईवेंट हैंडलर को जिस तरह से चाहते हैं उसे बना सकते हैं:
Button1.OnClick := procedure(sender : tobject) begin
...
end;
मेरी आंखों में यह सबसे अच्छा समाधान है।
स्रोत
2008-12-23 11:45:54
@ माजिन: यह चालाक है और यह काम करता है क्योंकि एक अज्ञात विधि एक अज्ञात वर्ग में एम्बेडेड है। भविष्य की संगतता पर संदर्भित आलेख में बैरी केली से टिप्पणी को पढ़ना सुनिश्चित करें, और बैरी केली द्वारा यह पोस्ट: http://blog.barrkel.com/2010/01/using-anonymous-methods-in-method.html –
यह समाधान Win32 प्लेटफ़ॉर्म पर काम करता है लेकिन Win64 नहीं। –
@ChauCheeYang सबसे अधिक संभावना है क्योंकि $ 0C आकारऑफ (सूचक) * 3 होना चाहिए .. –