2010-09-26 9 views
7

.NET में वैश्विक विधि क्या है? मैं ModuleBuilder.DefineGlobalMethod विधि द्वारा बनाए गए लोगों के बारे में बात कर रहा हूं।वैश्विक विधि क्या है?

क्या इन तरीकों को सी # या अन्य .NET भाषाओं से बुलाया जा सकता है?

उत्तर

3

परिचित शब्दों में इस बारे में बात करना मुश्किल है, यह क्षमता सी # या वीबी.नेट भाषाओं में बिल्कुल प्रकट नहीं है। सी ++/सीएलआई कंपाइलर हालांकि इसका उपयोग करता है। Ildasm.exe या Reflector जैसे disassemblers में दिखाया गया तरीका भी मानकीकृत नहीं है।

शायद सबसे अच्छा कोण प्रतिबिंबक है, System.Data.dll असेंबली पर एक नज़र डालें। यह एक अज्ञात नेमस्पेस ("-" परावर्तक में है), <Module> नोड। आपके द्वारा देखे जाने वाले .cctor में एक मॉड्यूल initiailizer है। एक स्थिर वर्ग कन्स्ट्रक्टर के रूप में लेकिन मॉड्यूल स्तर पर समान प्रकार का जानवर। जब विधानसभा लोड हो जाती है तो यह चलता है। सी ++/सीएलआई सी रनटाइम लाइब्रेरी को आरंभ करने के लिए इसका उपयोग करता है।

___ CxxCallUnwindDtor() विधि जो आपको मिलती है वह "वैश्विक विधि" का एक उदाहरण है। सी ++/सीएलआई भाषा इस तरह के कार्यों को सार्वजनिक बनाने का कोई तरीका नहीं देती है, वे हमेशा आंतरिक पहुंच के साथ मेटाडेटा में एम्बेडेड होते हैं। और इस प्रकार सीधे सी # या वीबी.नेट कार्यक्रम से नहीं कहा जा सकता है। मैंने मॉड्यूलबिल्डर के साथ पर्याप्त नहीं खेला है कि यह जानने के लिए कि सी ++/सीएलआई क्या करता है उससे परे गड़बड़ हो सकती है। यह सब बहुत अस्पष्ट है और वास्तव में उपयोगी नहीं है।

+2

सिस्टम को देख रहे हैं। डेटा ने मुझे प्रबुद्ध किया है। वहां कुछ विधियां हैं जिन्हें सार्वजनिक के रूप में परिभाषित किया गया है, लेकिन सी # से उन्हें एक्सेस करने का कोई तरीका नहीं है। – configurator

0

वैश्विक विधि मतलब है कि प्रणाली पूरी तरह से यानी

विधि (परम) Module.Method (परम) के बजाय का नाम योग्यता के बिना कहा जा सकता है।

vb में मॉड्यूल के अंदर एक सार्वजनिक विधि वैश्विक है।

सी # में एक स्थिर वर्ग में एक सार्वजनिक स्थैतिक विधि वैश्विक है।

+1

सबसे पहले, सी # में (और मुझे लगता है कि वीबी भी) आप क्लास नाम के साथ अर्हता प्राप्त किए बिना अन्य कक्षाओं से सार्वजनिक स्थैतिक तरीकों को कॉल नहीं कर सकते हैं। द्वितीय और अधिक महत्वपूर्ण रूप से DefineGlobalMethod को मॉड्यूल बिल्डर पर कॉल किया जाता है (एक वीबी मॉड्यूल नहीं जो एक स्थिर वर्ग है), क्लास बिल्डर पर नहीं - इसलिए विधि कक्षा के अंदर नहीं होगी। – configurator

+0

कक्षा नाम को अर्हता प्राप्त किए बिना आप निश्चित रूप से वीबी में मॉड्यूल विधियों को कॉल कर सकते हैं। मैंने सोचा कि यह सी # में मामला था, लेकिन स्पष्ट रूप से सी # में एक स्थिर वर्ग को वीबी में एक मॉड्यूल से अलग तरीके से इलाज किया जाता है। – Tomasi

+0

मैं वीबी फ्रंट पर सही खड़ा हूं। क्या आप वाकई 'DefineGlobalMethod' क्या करते हैं? चूंकि विधियां अभी भी एक वीबी मॉड्यूल से संबंधित हैं, और 'DefineGlobalMethod' सीधे डीएलएल पर है। – configurator

संबंधित मुद्दे