এই সাধারণ ক্লাস দিয়ে শুরু করুন ...
ধরা যাক আমার কাছে ক্লাসগুলির একটি সহজ সেট রয়েছে:
class Bus
{
Driver busDriver = new Driver();
}
class Driver
{
Shoe[] shoes = { new Shoe(), new Shoe() };
}
class Shoe
{
Shoelace lace = new Shoelace();
}
class Shoelace
{
bool tied = false;
}
এ Bus
এর একটি আছে Driver
, Driver
দুটিতে রয়েছে Shoe
, প্রত্যেকের Shoe
রয়েছে একটি Shoelace
। সব খুব নিরীহ।
জুতার একটি আইডিজিপোজযোগ্য বস্তু যুক্ত করুন
পরে আমি স্থির করি যে এর উপর কিছু অপারেশন Shoelace
বহু-থ্রেডযুক্ত হতে পারে, তাই EventWaitHandle
থ্রেডগুলির সাথে যোগাযোগের জন্য আমি একটি যুক্ত করি । সুতরাং Shoelace
এখন এই মত দেখাচ্ছে:
class Shoelace
{
private AutoResetEvent waitHandle = new AutoResetEvent(false);
bool tied = false;
// ... other stuff ..
}
জুতার উপর আইডিজিপোজযোগ্য প্রয়োগ করুন
তবে এখন মাইক্রোসফ্টের এফএক্সকপ অভিযোগ করবে: "'জুতো'-তে আইডিজিপোজযোগ্য প্রয়োগ করুন কারণ এটি নিম্নলিখিত আইডিজিপোজযোগ্য প্রকারের সদস্যদের তৈরি করে:' ইভেন্টওয়েটহ্যান্ডেল '।
ঠিক আছে, আমি বাস্তবায়ন IDisposable
উপর Shoelace
এবং আমার ঝরঝরে সামান্য বর্গ এই ভয়ঙ্কর জগাখিচুড়ি হয়ে:
class Shoelace : IDisposable
{
private AutoResetEvent waitHandle = new AutoResetEvent(false);
bool tied = false;
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~Shoelace()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if (waitHandle != null)
{
waitHandle.Close();
waitHandle = null;
}
}
// No unmanaged resources to release otherwise they'd go here.
}
disposed = true;
}
}
অথবা (কমেন্টাররা উল্লেখ করেছেন) যেহেতু Shoelace
নিজের কোনও ব্যবস্থাপনিত সংস্থান নেই, তাই আমি Dispose(bool)
এবং ডেস্ট্রাক্টরের প্রয়োজন ছাড়াই সহজতর নিষ্পত্তি বাস্তবায়নটি ব্যবহার করতে পারি :
class Shoelace : IDisposable
{
private AutoResetEvent waitHandle = new AutoResetEvent(false);
bool tied = false;
public void Dispose()
{
if (waitHandle != null)
{
waitHandle.Close();
waitHandle = null;
}
GC.SuppressFinalize(this);
}
}
আইডিস্পোজেবল ছড়িয়ে পড়ার সাথে সাথে হররে দেখুন
ঠিক যে স্থির। তবে এখন এফএক্সকপ অভিযোগ করবে যে এটি Shoe
তৈরি করে Shoelace
, তাই Shoe
অবশ্যই হবে IDisposable
।
এবং Driver
তৈরি Shoe
তাই Driver
হতে হবে IDisposable
। এবং Bus
ক্রিয়েটস Driver
তাই Bus
অবশ্যই হবে IDisposable
এবং তাই।
হঠাৎ করে আমার ছোট্ট পরিবর্তনটি Shoelace
আমাকে প্রচুর পরিশ্রমের কারণ করছে এবং আমার বস ভাবছেন যে কেন আমাকে এই Bus
পরিবর্তনটি করার জন্য চেকআউট করতে হবে Shoelace
।
প্রশ্নটি
আপনি কীভাবে এই IDisposable
প্রসারকে আটকাবেন, তবে তবুও নিশ্চিত করুন যে আপনার নিয়ন্ত্রণহীন অবজেক্টগুলি সঠিকভাবে নিষ্পত্তি করা হয়েছে?