উদাহরণ স্বরূপ:
public class Person
{
public Person()
{
}
~Person()
{
}
}
আমি কখন ম্যানুয়ালি একটি ডেস্ট্রাক্টর তৈরি করব? আপনার কখন ডেস্ট্রাক্টর তৈরি করার দরকার পড়েছে?
উদাহরণ স্বরূপ:
public class Person
{
public Person()
{
}
~Person()
{
}
}
আমি কখন ম্যানুয়ালি একটি ডেস্ট্রাক্টর তৈরি করব? আপনার কখন ডেস্ট্রাক্টর তৈরি করার দরকার পড়েছে?
উত্তর:
আপডেট: 2015 সালের মে মাসে এই প্রশ্নটি আমার ব্লগের বিষয় ছিল । মহান প্রশ্নের জন্য ধন্যবাদ! লোকেরা সাধারণত চূড়ান্তকরণ সম্পর্কে বিশ্বাস করে এমন মিথ্যাচারের দীর্ঘ তালিকার জন্য ব্লগটি দেখুন।
আমি কখন ম্যানুয়ালি একটি ডেস্ট্রাক্টর তৈরি করব?
প্রায় না.
সাধারণত যখন কেবল আপনার ক্লাসটি কোনও ব্যয়বহুল পরিচালনা না করা রিসোর্স ধরে থাকে তখন অবজেক্টর তৈরি করে যখন অবজেক্টটি চলে যায় তখন পরিষ্কার করতে হবে। রিসোর্সটি পরিষ্কার হয়ে গেছে তা নিশ্চিত করার জন্য ডিসপোজেবল প্যাটার্নটি ব্যবহার করা আরও ভাল। একজন ডেস্ট্রাক্টর তখন মূলত একটি আশ্বাস যে আপনার সামগ্রীর গ্রাহক যদি এটি নিষ্পত্তি করতে ভুলে যান তবে অবশেষে সংস্থানটি পরিষ্কার হয়ে যায়। (হতে পারে.)
যদি আপনি কোনও ডেস্ট্রাক্টর তৈরি করেন তবে অত্যন্ত যত্নবান হন এবং জঞ্জাল সংগ্রহকারী কীভাবে কাজ করে তা বুঝতে পারেন । ধ্বংসকারীরা সত্যই অদ্ভুত :
প্রায়শই যা সাধারণত সাধারণত সত্য তা কোনও ডেস্ট্রাক্টরে সত্য। সত্যিই, সাবধান। একটি সঠিক ডেস্ট্রাক্টর লেখা খুব কঠিন।
আপনার কখন ডেস্ট্রাক্টর তৈরি করার দরকার পড়েছে?
সংকলকটির অংশটি পরীক্ষা করার সময় যা ধ্বংসকারীদের পরিচালনা করে। প্রোডাকশন কোডে আমার কখনই এটি করার দরকার ছিল না। আমি খুব কমই অবজেক্টগুলি লিখি যা পরিচালনাহীন সংস্থানগুলিতে হেরফের করে।
একে "ফাইনালাইজার" বলা হয় এবং আপনি সাধারণত এমন শ্রেণীর জন্য একটি তৈরি করতে পারেন যার রাজ্যে (যেমন: ক্ষেত্রগুলি) অপরিকল্পিত সংস্থানসমূহ অন্তর্ভুক্ত থাকে (অর্থাত্: পি / ইনভোক কলের মাধ্যমে পুনরুদ্ধার করা হ্যান্ডলগুলি নির্দেশক)। যাইহোক, .NET 2.0 এবং পরবর্তী সময়ে, অপরিকল্পিত সংস্থানগুলি সাফ করার জন্য কার্যকরী করার আরও ভাল উপায় আছে: সেফহ্যান্ডল । এটি দেওয়া হয়েছে, আপনার আর কখনও চূড়ান্ত লেখার দরকার নেই।
আপনার ক্লাসটি উইন্ডোজ ফাইল হ্যান্ডলগুলির মতো পরিচালনা না করা রিসোর্সগুলি বজায় না রাখলে আপনার প্রয়োজন নেই।
একে ডেস্ট্রাক্টর / ফাইনালাইজার বলা হয় এবং সাধারণত নিষ্পত্তিযোগ্য প্যাটার্নটি প্রয়োগ করার সময় তৈরি হয়।
এটি একটি ফ্যালব্যাক সমাধান যখন আপনার ক্লাসের ব্যবহারকারী ডিসপোজ কল করতে ভুলে যায়, (শেষ পর্যন্ত) আপনার সংস্থানগুলি মুক্তি পেয়েছে তা নিশ্চিত করার জন্য, তবে ধ্বংসকারীকে কখন ডাকা হবে সে সম্পর্কে আপনার কোনও গ্যারান্টি নেই।
এই স্ট্যাক ওভারফ্লো প্রশ্নে , গৃহীত উত্তর সঠিকভাবে দেখায় যে কীভাবে নিষ্পত্তি প্যাটার্নটি প্রয়োগ করা যায়। এটি কেবল তখনই প্রয়োজন যখন আপনার শ্রেণিতে এমন কোনও শত্রুহীন সম্পদ রয়েছে যা আবর্জনা সংগ্রহকারী নিজেকে পরিষ্কার করার ব্যবস্থা করে না।
একটি ভাল অনুশীলন হ'ল ক্লাসের ব্যবহারকারীকে অবিলম্বে সম্পদগুলি মুক্ত করার জন্য বস্তুটি নিষ্পত্তি করার সম্ভাবনা না দিয়ে চূড়ান্তকরণকারীকে বাস্তবায়ন না করা।
যখন আপনার নিয়ন্ত্রণহীন সংস্থান আছে এবং আপনার অবজেক্ট চলে গেলে সেগুলি পরিষ্কার হয়ে যাবে তা নিশ্চিত করা দরকার। ভাল উদাহরণটি COM অবজেক্টস বা ফাইল হ্যান্ডলারগুলি হবে।
আমি কোনও ডেস্ট্রাক্টর ব্যবহার করেছি (কেবলমাত্র ডিবাগের উদ্দেশ্যে) ডাব্লুপিএফ অ্যাপ্লিকেশনের সুযোগে কোনও বস্তু স্মৃতি থেকে মুছে ফেলা হচ্ছে কিনা তা দেখার জন্য। আমি নিশ্চিত নই যে আবর্জনা সংগ্রহের কারণে বস্তুটি সত্যই স্মৃতি থেকে মুছে ফেলা হচ্ছে এবং এটি যাচাই করার একটি ভাল উপায় ছিল।
ডেস্ট্রাক্টররা আপনার ক্লাসে থাকা অপ্রয়োজনীয় রিসোর্সগুলি মুক্ত করার একটি অন্তর্নিহিত উপায় সরবরাহ করে, যখন জিসি এটির কাছাকাছি আসে এবং তারা স্পষ্টভাবে বেস শ্রেণির চূড়ান্তকরণ পদ্ধতিটি কল করে। যদি আপনি প্রচুর পরিমাণ নিয়ন্ত্রণহীন সংস্থান ব্যবহার করেন তবে এই সংস্থানগুলিকে আইডিসপোজেবল ইন্টারফেসের মাধ্যমে মুক্ত করার একটি সুস্পষ্ট উপায় সরবরাহ করা ভাল। সি # প্রোগ্রামিং গাইড দেখুন: http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx