সি # তে কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে পার্থক্য কী?


উত্তর 1:

সি # এর ডেস্ট্রাক্টর নেই, এর ফাইনালাইজার রয়েছে, যা আলাদা।

মূলত, একজন কনস্ট্রাক্টরকেই বলা হয় ‘নতুন’ কীওয়ার্ড এবং যে ভাষাগুলিতে সেগুলি রয়েছে, তাদেরকে মুছে ফেলুন ‘মুছুন’ কীওয়ার্ড (বা যখন বস্তুটি সুযোগের বাইরে চলে যায়) বলে।

অন্যদিকে, একটি চূড়ান্তকরণকারীকে আবর্জনা সংগ্রহকারী বলে _ কিছু সময় পরে _ বস্তুটি বাইরে চলে যায় বা স্কোপ হয় (প্রযুক্তিগতভাবে যখন সেখানে কোনও পয়েন্টার না থাকে যা "সুযোগের বাইরেও নয়")।

ফাইনালাইজারদের সম্পর্কে দুটি গুরুত্বপূর্ণ বিষয় লক্ষণীয়:

  • কখন ডাকা হবে ঠিক আপনার জানার কোনও উপায় নেই আপনার চূড়ান্তকরণে কী করা উচিত সে সম্পর্কে আপনাকে সতর্কতা অবলম্বন করা উচিত - একই শ্রেণীর অন্যান্য জিনিসগুলি আবর্জনা সংগ্রহ করা হতে পারে ready আপনার কেবলমাত্র কোনও ফাইনালাইজারে পরিচালনা না করা রেফারেন্স স্পর্শ করা উচিত।

আপনি যদি সি # তে কোনও ডেস্ট্রাক্টরের কাছাকাছি কিছু চান / চান তবে আপনার আইডিস্পোজেবল ইন্টারফেস রয়েছে যা একটি পদ্ধতি সরবরাহ করে; "নিষ্পত্তি"।

সি # এর একটি বিশেষ কীওয়ার্ড রয়েছে "ব্যবহার করে", এটি একটি স্কোপের মধ্যে একটি অবজেক্টকে ঘোষনা করে এবং ডিসপোজ-পদ্ধতি বলা হয় বলে গ্যারান্টি দেয়।

এই পদ্ধতিতে প্রভাবশালী শ্রেণীর মালিকানাধীন যে কোনও আইডিপোজেবল বস্তুও নিষ্পত্তি করা উচিত।

যদি আপনি শ্রেণিটি কোনও পরিচালনা না করে রাখা অবজেক্ট রাখেন তবে আপনার ডিসপোজ-পদ্ধতির একটি ওভারলোড তৈরি করা উচিত যা বুলিয়ান প্যারামিটার নেয়। এই পদ্ধতিতে সমস্ত ব্যবস্থাবিহীন রেফারেন্স নিষ্পত্তি করা উচিত এবং যদি বুল প্যারামিটারটি সত্য হয় তবে এটি কোনও আইডিস্পোজেবল অবজেক্টগুলিকে নিষ্পত্তি করতে হবে। তারপরে আপনার একটি চূড়ান্তকরণকারী তৈরি করা উচিত, যা নিষ্পত্তি পদ্ধতিটি কখনও কল না করা হয়, যদি পরিচালনা না করা সংস্থানগুলি মুক্ত হয় তা নিশ্চিত করতে ডিসপোজ (মিথ্যা) বলে। নিয়মিত ডিসপোজকে ডিসপোজ (সত্য) কল করা উচিত এবং জিসি.সর্প্রেসফাইনালাইজ () কেও কল করা উচিত, যেহেতু চূড়ান্তকরণ ন্যাকেরেসারি হবে না (এটি নিশ্চিত করে যে বস্তুটি আরও দ্রুত জঞ্জাল সংগ্রহ করে এবং চূড়ান্তকরণকারীর ত্রুটিগুলি রোধ করতে সহায়তা করে)


উত্তর 2:

কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর সি # বা জাভা এর মতো কোনও প্রোগ্রামিং ভাষায় ক্লাসের বিশেষ সদস্য ফাংশন। থিস সদস্যদের ফাংশনটির নাম বর্গের নামের মতো হয় এবং যখন আমরা কোনও শ্রেণীর অবজেক্ট তৈরি করি তখন তা আহবান করা হয়।

মূলত কন্সট্রাক্টর একটি শ্রেণীর ডেটা সদস্যদের আরম্ভ করতে ব্যবহৃত হয় এবং বস্তু ধ্বংস করতে বা অবজেক্টের দ্বারা স্মৃত স্মৃতি প্রকাশের জন্য ডেস্ট্রাক্টর ব্যবহার করা হয়।

কন্সট্রাক্টরের একটি রিয়েল টাইম ব্যবহার হ'ল ডিফল্ট মান সহ ডেটা সদস্যদের সূচনা করা এবং সে কারণেই আমাদের ডিফল্ট কনস্ট্রাক্টর রয়েছে।

উদাহরণস্বরূপ যখনই আমরা জিমেইল, ইয়াহু বা মাইক্রোসফ্টের মতো কোনও ডোমেইনের যে কোনও ইমেল তৈরি করি আমরা আমাদের ইনবক্সে কিছু ডিফল্ট ইমেল পাই যার অর্থ এই ইমেলগুলি ডিফল্ট মান।

এটি আরও ভালভাবে বোঝার জন্য Gmail কে শ্রেণি হিসাবে বিবেচনা করুন।

ক্লাস জিমেইল
{
 স্ট্রিং বার্তা;
 পাবলিক জিমেইল (স্ট্রিং ব্যবহারকারীর নাম)
 {
   বার্তা = "জিমেইলে স্বাগতম" + ব্যবহারকারীর নাম
 }
}
প্রধান কাজ
জিমেইল জি 1 = নতুন জিমেইল ("শিনচান.gapt");
জিমেইল জি 2 = নতুন জিমেইল ("অ্যাচিং.gapt");

এখন যখনই আমরা একটি নতুন ইমেল আইডি তৈরি করব এর অর্থ আমরা Gmail এর একটি নতুন অবজেক্ট তৈরি করছি। এবং এটি সমস্ত বস্তুর জন্য ডিফল্ট মান সহ বার্তা ডেটা মেম্বারদের সূচনা করবে এবং এ কারণেই জিমেইলের প্রতিটি ব্যবহারকারী ইনবক্সে একই বার্তা পায় এবং আপনি বলতে পারেন যে ডিফল্ট মেল।

এখন আমরা দুটি বস্তু তৈরি করেছি এবং এটিতে মেমরি বরাদ্দ রয়েছে যা একবার প্রোগ্রাম কার্যকর হয়ে গেলে প্রকাশ করা উচিত এবং এর জন্য আমাদের কাছে ডেস্ট্রাক্টর রয়েছে যা স্বয়ংক্রিয়ভাবে বলা হয় এবং মেমরিটি প্রকাশের জন্য অবজেক্টগুলিকে ধ্বংস করে দেয়।

সাধারণ কথায় আপনি যখন কনস্ট্রাক্টর ব্যবহার করেন এটি মেমরি বরাদ্দ করে এবং যখন আপনি ডেস্ট্রাক্টর ব্যবহার করেন এটি বরাদ্দ মেমরিটি প্রকাশ করে।