2012-04-17 15 views
6

मैं कुछ DLLs के आसपास ILSpy और का उपयोग कर XNA ढांचे के भीतर poking कर रहा हूँ में दिखाया गया है वाक्य रचना इस भर में आया था:अजीब वर्ग के सदस्य ILSpy

class KerningHelper 
{ 
    private void !KerningHelper() 
    { 
     ((IDisposable)this).Dispose(); 
    } 
} 

ऊपर में के लिए विस्मयादिबोधक चिह्न क्या है? क्या यह ILSpy के साथ कोई समस्या है, या कुछ और?

नोट, कक्षा में एक अलग विनाशक है: private unsafe void ~KerningHelper()

+2

सीएलआई/सी ++ में! केर्निंगहेल्पर 'विनाशक' की बजाय 'फाइनलाइज़र' का प्रतीक होगा, शायद यह इसके साथ कुछ करने के लिए है? यहां एक नज़र डालें: http://en.wikipedia.org/wiki/C%2B%2B/CLI#Finalizers_and_automatic_variables – Nick

+1

यह वैध सी # या तो वैध नहीं है, इसलिए मैं कुछ आईएल प्रतिनिधित्व का अनुमान लगा रहा हूं जिसे फिर थोड़ा अनुवाद किया जाता है गलत। –

+0

@AdamHouldsworth: मैंने इसके साथ अपनी खुद की कक्षा लिखने की जांच की और उसी निष्कर्ष पर पहुंचे। मुझे मूल रूप से यह क्या है/मूल वाक्यविन्यास क्या है इसके बारे में दिलचस्पी है। :) –

उत्तर

5

टिप्पणियों के अनुसार, विस्मयादिबोधक चिह्न अंतिमकरण विधि के लिए सी ++/सीएलआई मार्कर है। परंपरागत सी ++ विनाशकों (~) के विपरीत जिन्हें आप स्पष्ट रूप से किसी ऑब्जेक्ट का निपटान करते हैं, फाइनल को कचरा कलेक्टर थ्रेड द्वारा बुलाया जाता है। आप आधिकारिक विवरण here देख सकते हैं।

मैं ILSpy, !KerningHelper()~KerningHelper() में अनुवाद करने के बाद से C++/CLI finalizer सी # के नाशक के बराबर है उम्मीद करेंगे - यह एक गैर नियतात्मक विधि जब जी सी, इसे करने के लिए हो जाता है C++/CLI की स्पष्ट ~ नाशक होता है कि है, जिसमें जब आप delete पर कॉल करते हैं या एक स्पष्ट निपटान कॉल किया जाता है तो कहा जाता है।

+0

स्पष्टीकरण के लिए धन्यवाद, मुझे क्या भ्रमित किया गया है कि 'कर्निंगहेल्पर' का विनाश भी था, इसलिए मुझे लगता है कि आईएलएसपी '!' का उपयोग करता है क्योंकि यह एक विनाशक के लिए अलग है। यदि आप फाइनल के लिए उपयोग के बारे में जानते हैं तो मुझे इसकी सराहना होगी क्योंकि मुझे लगता है कि मुझे लगता है कि 'निपटान' को वैसे भी बुलाया जाना चाहिए, इसलिए मैं इसका उपयोग समझ नहीं पा रहा हूं (यानी जब फाइनलर का उपयोग/साथ ही एक विनाशक?)। –