जब भी आप पूरा कर लेंगे तब भी आपको इसका निपटान करना होगा।
उदाहरण के लिए, आप इसे इस तरह कह सकते हैं: एक विधि एक IDisposable ऑब्जेक्ट
using (Pen p = CreatePenFromColor(color))
{
// do something
}
, तो इसे निपटाने के लिए अपने कर्तव्य है।
[संपादित करें] अब मुझे प्रश्न मिला - आप पेन (ब्रश बी) कन्स्ट्रक्टर का उपयोग कर रहे हैं।
ए।
public Pen CreatePenFromColor(Color c)
{
using (Brush b = new SolidBrush(c))
{ return new Pen(b); }
}
ख: इस मामले में, यह है कि पेन तो अपने विधि ऐसा दिखाई दे सकता, निर्माता के बाद ब्रश उदाहरण की जरूरत नहीं है लगता है। क्यों न केवल Pen(Color color) का उपयोग करें?
public Pen CreatePenFromColor(Color c)
{
return new Pen(c);
}
सी। (टिप्पणी के बारे में) यदि पेन आंतरिक रूप से ब्रश का संदर्भ रखेगा, तो आप पेन के साथ समाप्त होने से पहले इसे निपटाने में सक्षम नहीं होंगे।
public class PenHelper : IDisposable
{
private readonly Brush _brush;
public PenHelper(Color color)
{
_brush = new SolidBrush(color);
}
public Pen CreatePen()
{
return new Pen(_brush);
}
public void Dispose()
{
_brush.Dispose();
}
}
और उसके बाद इस तरह इसका इस्तेमाल:
using (PenHelper penHelper = new PenHelper(Color.Black))
{
using (Pen pen = penHelper.CreatePen())
{
// do stuff
}
}
अस्वीकरण: IDisposable, दिशा निर्देशों के अनुसार लागू नहीं है लेकिन उस मामले में, मैं एक वर्ग जो मेरे लिए काम करना होगा के लिए जाना होगा बल्कि प्रदर्शन के लिए। साथ ही, पूरे उदाहरण का उपयोग केवल यह दिखाने के लिए किया जाता है कि आवश्यकता होने पर संदर्भ को कैसे समाहित किया जाए। आपको निश्चित रूप से पेन (रंग) के लिए जाना चाहिए।
o.o मुझे नहीं पता था कि ब्रश और कलम कार्यान्वित IDisposable ... –
lol, यह निश्चित रूप से करता है। –
लेकिन यह ब्रश वास्तव में संदर्भित कहां है? क्यों (और कहां) आप इसे बना रहे हैं यदि आप केवल विधि परिणाम के रूप में पेन लौट रहे हैं? – Groo