এই সাধারণ ক্লাস দিয়ে শুরু করুন ...
ধরা যাক আমার কাছে ক্লাসগুলির একটি সহজ সেট রয়েছে:
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প্রসারকে আটকাবেন, তবে তবুও নিশ্চিত করুন যে আপনার নিয়ন্ত্রণহীন অবজেক্টগুলি সঠিকভাবে নিষ্পত্তি করা হয়েছে?