কম্পিউটার

C# এ চূড়ান্ত করা এবং নিষ্পত্তি করার মধ্যে পার্থক্য কী?


চূড়ান্ত করা

Finalize() গারবেজ কালেক্টর দ্বারা আহবান করা হয় সংগ্রহের জন্য যোগ্য বস্তু পুনরুদ্ধার করার আগে। আবর্জনা সংগ্রাহক অনির্ধারিত বস্তুর জন্য মেমরি ডিলোকেট করার দায়িত্ব নেবে। মেমরিতে সেই বস্তুর আর বৈধ উল্লেখ না থাকার পরে আবর্জনা সংগ্রাহক এই পদ্ধতিটিকে কল করে।

কাঠামোটি গ্যারান্টি দেয় না যে এটি কখন ঘটবে, আমরা আবর্জনা সংগ্রহের জন্য জোর করতে পারি তবে এটি একটি প্রোগ্রামের কার্যকারিতাকে ক্ষতিগ্রস্ত করবে। Finalize() অবজেক্ট ক্লাসের অন্তর্গত এবং এটি রানটাইম দ্বারা কল করা হবে।

উদাহরণ

using System;
namespace DemoApplication{
   public class Demo{
      ~Demo(){
         Console.WriteLine("Finalize called");
      }
   }
}

ডিসপোজ

কিছু সম্পদ আছে যেমন উইন্ডোজ হ্যান্ডেল, ডাটাবেস সংযোগ, নেটওয়ার্ক সংযোগ, ফাইল ইত্যাদি যা আবর্জনা সংগ্রাহক সংগ্রহ করতে পারে না। আমরা যদি কিছু নির্দিষ্ট বস্তুকে স্পষ্টভাবে প্রকাশ করতে চাই তাহলে IDisposable বাস্তবায়ন করা এবং IDisposable ইন্টারফেসের Dispose() পদ্ধতিকে ওভাররাইড করা সবচেয়ে ভালো।

ডিসপোজ() পদ্ধতিটি স্বয়ংক্রিয়ভাবে কল করা হয় না এবং যখন কোন বস্তুর আর প্রয়োজন হয় না তখন আমাদের অবশ্যই একটি ক্লায়েন্ট অ্যাপ্লিকেশন থেকে এটিকে স্পষ্টভাবে কল করতে হবে। বস্তুর অন্যান্য রেফারেন্স জীবিত থাকলেও Dispose() বলা যেতে পারে।

উদাহরণ

using System;
namespace DemoApplication{
   public class Demo : IDisposable{
      private bool disposed = false;
      public void Dispose(){
         Dispose(true);
         GC.SuppressFinalize(this);
      }
      protected virtual void Dispose(bool disposing){
         if (!disposed){
            if (disposing){
               //clean up managed objects
            }
            //clean up unmanaged objects
            disposed = true;
         }
      }
   }
}

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


  1. DirectX 11 এবং DirectX 12-এর মধ্যে পার্থক্য কী?

  2. C# এ আক্ষরিক এবং ধ্রুবকের মধ্যে পার্থক্য কী?

  3. C# এ স্ট্রিং এবং স্ট্রিং এর মধ্যে পার্থক্য কি?

  4. C# এ একটি তালিকা এবং একটি অ্যারের মধ্যে পার্থক্য কী?