সি # ২০০৮
আমি এখনই কিছুক্ষণ ধরে এটি নিয়ে কাজ করছি এবং কোডের ক্ষেত্রে চূড়ান্তকরণ এবং নিষ্পত্তি করার পদ্ধতিগুলি সম্পর্কে আমি এখনও বিভ্রান্ত। আমার প্রশ্নগুলি নীচে রয়েছে:
আমি জানি যে নিয়ন্ত্রণহীন সংস্থানগুলি নিষ্পত্তি করার সময় আমাদের কেবলমাত্র একটি ফাইনালাইজারের প্রয়োজন need যাইহোক, যদি ব্যবস্থাপনিত সংস্থান আছে যেগুলি পরিচালনা না করা সংস্থাগুলিতে কল করে, তবে কি এখনও এটি চূড়ান্তকরণের বাস্তবায়ন করা দরকার?
তবে, আমি যদি এমন কোনও শ্রেণীর বিকাশ করি যা প্রত্যক্ষ বা অপ্রত্যক্ষভাবে কোনও পরিচালনা না করা সংস্থান ব্যবহার করে না, আমি কি
IDisposable
এই শ্রেণীর ক্লায়েন্টদের 'ব্যবহারের বিবৃতি' ব্যবহারের অনুমতি দেওয়ার জন্য বাস্তবায়ন করব ?কেবলমাত্র আপনার ক্লাসের ক্লায়েন্টদের ব্যবহারের বিবৃতিটি ব্যবহার করতে সক্ষম করতে আইডিপোজেবলকে বাস্তবায়ন করা কি সম্ভব হবে?
using(myClass objClass = new myClass()) { // Do stuff here }
চূড়ান্তকরণ / নিষ্পত্তি করার ব্যবহারটি প্রদর্শনের জন্য আমি নীচে এই সাধারণ কোডটি বিকাশ করেছি:
public class NoGateway : IDisposable { private WebClient wc = null; public NoGateway() { wc = new WebClient(); wc.DownloadStringCompleted += wc_DownloadStringCompleted; } // Start the Async call to find if NoGateway is true or false public void NoGatewayStatus() { // Start the Async's download // Do other work here wc.DownloadStringAsync(new Uri(www.xxxx.xxx)); } private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { // Do work here } // Dispose of the NoGateway object public void Dispose() { wc.DownloadStringCompleted -= wc_DownloadStringCompleted; wc.Dispose(); GC.SuppressFinalize(this); } }
উত্স কোড সম্পর্কে প্রশ্ন:
এখানে আমি চূড়ান্তকরণকারীর সংযোজন করিনি, এবং সাধারণত চূড়ান্তকরণকারীকে জিসি ডেকে আনে এবং চূড়ান্তকরণকারীকে ডিসপোজ কল করে। আমার চূড়ান্তকরণকারী না থাকায় আমি কখন ডিসপোজ পদ্ধতিতে কল করব? এটা ক্লাস ক্লায়েন্ট যে এটি কল করতে হবে?
সুতরাং উদাহরণস্বরূপ আমার ক্লাসটিকে নোগেটওয়ে বলা হয় এবং ক্লায়েন্টটি ক্লাসটি এভাবে ব্যবহার করতে এবং নিষ্পত্তি করতে পারে:
using(NoGateway objNoGateway = new NoGateway()) { // Do stuff here }
এক্সিকিউশনটি ব্যবহারের ব্লকের শেষে পৌঁছে গেলে কি ডিসপোজ পদ্ধতিটি স্বয়ংক্রিয়ভাবে কল হবে বা ক্লায়েন্টকে ম্যানুয়ালি ডিসপোজ পদ্ধতিতে কল করতে হবে? অর্থাত
NoGateway objNoGateway = new NoGateway(); // Do stuff with object objNoGateway.Dispose(); // finished with it
আমি
WebClient
আমারNoGateway
ক্লাসে ক্লাসটি ব্যবহার করছি । কারণ ইন্টারফেসWebClient
প্রয়োগ করেIDisposable
, এর অর্থ কিWebClient
পরোক্ষভাবে অপরিকল্পিত সংস্থান ব্যবহার করে? এটি অনুসরণ করার জন্য কি কোনও কঠোর এবং দ্রুত নিয়ম রয়েছে? আমি কীভাবে জানতে পারি যে কোনও শ্রেণি অবরুদ্ধ পরিচালিত সংস্থান ব্যবহার করে?