2011-05-30 9 views
5

मैं वीक रेफरेंस के साथ प्रयोग कर रहा हूं, और मैं एक कोड लिख रहा हूं जो जांचता है कि वस्तु के मजबूत संदर्भ को लौटने से पहले एक कमजोर संदर्भ मान्य है या नहीं।कमजोर संदर्भों का विश्लेषण करते समय कचरा कलेक्टर ब्लॉक करें

if (weakRef.IsValid) 
    return (ReferencedType)weakRef.Target; 
else 
    // Build a new object 

मैं जीसी को "IsValid" और "लक्ष्य" कॉल के बीच ऑब्जेक्ट एकत्र करने से कैसे रोकूं? आप एक मजबूत संदर्भ तो आप आश्वासन दिया जाता है कि यह जीसी द्वारा एकत्र नहीं किया जाएगा प्राप्त करने में सफल हो, तो

var rt = weakRef.Target as ReferencedType; 

if (rt != null) 
    // You now have a strong reference that you can safely use 

:

उत्तर

7

इसके बजाय आप कुछ इस तरह करना चाहिए। एक और पूरी उदाहरण में MSDN WeakReference पेज प्रदान की जाती है और आप भी उपयोगी साबित हो सकते निम्नलिखित अगर आपने पहले नहीं पढ़ा है:

Weak References

+0

+1 मुझे लगता है कि वास्तव में यह करने के लिए सही तरीका है। –

+0

यह मुझे जाने का सबसे "प्राकृतिक" तरीका लगता है। पूर्णता के लिए, इसे कम कमजोर संदर्भों के उपयोग की आवश्यकता होती है, जो मेरे मामले में कोई समस्या नहीं है। –

+0

+1 कारण यह सुनिश्चित करने का एकमात्र तरीका है। लेकिन मुझे नहीं लगता कि आपको इसे आवश्यक 'संदर्भ प्रकार' पर डालना होगा। आप इसे 'ऑब्जेक्ट' के रूप में भी प्राप्त कर सकते हैं और इस पर शून्य-वैधता-जांच कर सकते हैं। ऑब्जेक्ट के साथ आप जो करना चाहते हैं उसके आधार पर यह शायद समझ में आता है, लेकिन यह सुनिश्चित करने की आवश्यकता नहीं है कि इंस्टेंस ज़िंदा है। – Oliver

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