জনসাধারণের পরিবর্তনযোগ্য ক্ষেত্র বা বৈশিষ্ট্যগুলি সহ স্ট্রাক্টগুলি মন্দ নয়।
কাঠামোগত পদ্ধতি (সম্পত্তি সেটারের থেকে পৃথক) যা "এটি" কিছুটা খারাপ তা কেবল পরিবর্তিত করে। স্ট্রাক পদ্ধতিগুলি যে "এই" কে রূপান্তরিত করে না, এমনকি প্রতিরক্ষামূলক অনুলিপি ছাড়াই কেবল পঠনযোগ্য স্ট্রাক্টগুলিতে চালিত হওয়া উচিত। "এটি" রূপান্তরকারী পদ্ধতিগুলি কেবল পঠনযোগ্য স্ট্রাক্টগুলিতে মোটেও চালানো উচিত নয়। যেহেতু .NET এমন কাঠামো পদ্ধতিগুলি নিষিদ্ধ করতে চায় না যা "কেবল" কেবলমাত্র পঠনযোগ্য স্ট্রাক্টগুলিতে চালিত হওয়া থেকে পরিবর্তিত হয় না, তবে কেবলমাত্র পঠনযোগ্য স্ট্রাক্টগুলিকে পরিবর্তিত হতে দেয় না, তাই এটি প্রতিরক্ষামূলকভাবে কেবল স্ট্রাক্টগুলিতে অনুলিপিগুলি অনুলিপি করে ies উভয় পৃথিবীর মধ্যে সবচেয়ে খারাপ দিকটি কেবল প্রসঙ্গেই রয়েছে।
কেবল পঠনযোগ্য প্রেক্ষাপটে স্ব-পরিবর্তনের পদ্ধতিগুলি পরিচালনা করার ক্ষেত্রে সমস্যা থাকা সত্ত্বেও, পরিবর্তনযোগ্য স্ট্রাক্টগুলি প্রায়শই শব্দার্থকে পারস্পরিক পরিবর্তনযোগ্য শ্রেণির চেয়ে অনেক উচ্চতর প্রস্তাব দেয়। নিম্নলিখিত তিনটি পদ্ধতি স্বাক্ষর বিবেচনা করুন:
Point পয়েন্টিস্ট্রাক্ট {পাবলিক ইনট এক্স, ওয়াই, জেড;};
শ্রেণি পয়েন্টি ক্লাস {পাবলিক ইন্ট x, y, z;;;
অকার্যকর পদ্ধতি 1 (পয়েন্টিস্ট্রাক্ট ফু);
অকার্যকর মেথড 2 (রেফার্ট পয়েন্টিস্ট্রাক্ট ফু);
অকার্যকর পদ্ধতি 3 (পয়েন্টি ক্লাস ফু);
প্রতিটি পদ্ধতির জন্য, নিম্নলিখিত প্রশ্নের উত্তর দিন:
- অনুমান করে যে পদ্ধতিটি কোনও "অনিরাপদ" কোড ব্যবহার করে না, এটি ফুকে সংশোধন করতে পারে?
- পদ্ধতিটি বলার আগে যদি 'foo' এর বাইরের কোনও রেফারেন্স উপস্থিত না থাকে, তবে কোনও বাহ্যিক রেফারেন্স পরে থাকতে পারে?
উত্তর:
প্রশ্ন 1::
Method1()
না (স্পষ্ট উদ্দেশ্য)
Method2()
: হ্যাঁ (পরিষ্কার উদ্দেশ্য)
Method3()
হ্যাঁ (অনিশ্চিত উদ্দেশ্য)
প্রশ্ন 2
Method1()
:: না
Method2()
: না (অনিরাপদ ব্যতীত)
Method3()
: হ্যাঁ
পদ্ধতি 1 foo সংশোধন করতে পারে না এবং কোনও রেফারেন্স পায় না। মেথড 2 foo- এর একটি স্বল্প-কালীন রেফারেন্স পায়, যা এটি foo এর ক্ষেত্রগুলিকে যে কোনও সংখ্যায়, যে কোনও ক্রমে ফিরিয়ে না দেওয়া পর্যন্ত ব্যবহার করতে পারে, তবে এটি সেই রেফারেন্সটি ধরে রাখতে পারে না। মেথড 2 ফেরত দেওয়ার আগে, যদি এটি অনিরাপদ কোড ব্যবহার না করে, এর 'foo' রেফারেন্স তৈরি করা হতে পারে এমন যে কোনও এবং সমস্ত অনুলিপি অদৃশ্য হয়ে যাবে। মেথড 3, মেথোড 2 এর বিপরীতে, ফু-র কাছে একটি দ্রুত-ভাগ্যযোগ্য রেফারেন্স পেয়েছে এবং এটি এর সাথে কী করবে তা বলার অপেক্ষা রাখে না। এটি একেবারেই ফু বদলাতে পারে না, এটি ফু ও তার পরিবর্তে ফিরে আসতে পারে, বা এটি অন্য থ্রেডের কাছে ফুকে একটি রেফারেন্স দিতে পারে যা ভবিষ্যতে কিছুটা স্বেচ্ছাচারিতায় কিছুটা নির্বিচারে উপায়ে রূপান্তর করতে পারে।
স্ট্রাকচারের অ্যারেগুলি দুর্দান্ত শব্দার্থবিদ্যা সরবরাহ করে। রেক্টআরএল [৫০০] ধরণের আয়তক্ষেত্র দেওয়া, এটি কীভাবে উদাহরণ 123 উপাদানটিকে 456 এ নকল করতে হবে তা স্পষ্ট এবং সুস্পষ্ট এবং পরে কিছুক্ষণ পরে বিরক্তিকর উপাদান 456 ছাড়াই 123 থেকে 555 এলিমেন্টের প্রস্থ নির্ধারণ করতে পারেন। "রেক্টআরে [432] = রেক্টআরে [321 ]; ...; রেক্টআরারি [123]। প্রস্থ = 555; "। আয়তক্ষেত্রটি প্রস্থ নামক একটি পূর্ণসংখ্যার ক্ষেত্র সহ একটি কাঠামো তা জেনে উপরের বিবৃতিগুলি সম্পর্কে সকলকে জানা দরকার।
এখন ধরা যাক রেক্টক্লাসটি একটি ক্ষেত্র ছিল যা আয়তক্ষেত্রের মতো একই ক্ষেত্রযুক্ত এবং RectClassArray [500] টাইপ রেক্টক্লাসে একই ক্রিয়াকলাপ করতে চেয়েছিল। সম্ভবত অ্যারের পরিবর্তনীয় রেক্টক্লাস বস্তুর 500 প্রারম্ভিক প্রাথমিক পরিবর্তনযোগ্য রেফারেন্স রাখার কথা। সেক্ষেত্রে সঠিক কোডটি "রেক্টক্লাসআরাই [321]। সেটবাউন্ডস (রেক্টক্লাসআরাই [456]); ...; রেক্টক্লাসআরে [321]। এক্স = 555;" এর মতো কিছু হবে। সম্ভবত অ্যারেটি উদাহরণস্বরূপ ধারণ করেছে যেগুলি বদলাচ্ছে না, সুতরাং সঠিক কোডটি "রেক্টক্লাসআরেই [321] = রেক্টক্লাসআরে [456]; ...; রেক্টক্লাসআরে [321] = নতুন রেক্টক্লাস (রেক্টক্লাসআরে [321 ]); রেক্টক্লাসআরে [321]। এক্স = 555; " কোনটি করণীয় তা জানতে, রেক্টক্লাস সম্পর্কে উভয়কে আরও অনেক কিছু জানতে হবে (উদাহরণস্বরূপ, এটি কোনও অনুলিপি নির্মাণকারী, একটি অনুলিপি পদ্ধতি ইত্যাদি সমর্থন করে) does ) এবং অ্যারের উদ্দেশ্য ব্যবহার স্ট্রাক ব্যবহারের মতো পরিষ্কার আর কোথাও নেই।
নিশ্চিত হতেই, দুর্ভাগ্যক্রমে কোনও অ্যারে ব্যতীত অন্য কোনও ধারক শ্রেণীর পক্ষে স্ট্রাক্ট অ্যারের পরিষ্কার শব্দার্থক অফার দেওয়ার পক্ষে আর ভাল উপায় নেই। সর্বোত্তমটি এটি করতে পারে, যদি কোনও সংগ্রহ যেমন উদাহরণস্বরূপ একটি স্ট্রিংয়ের সাথে সূচীকরণ করতে চায় তবে সম্ভবত একটি জেনেরিক "অ্যাক্টঅ্যান্টিমিটি" পদ্ধতি দেওয়া হত যা সূচক, একটি জেনেরিক পরামিতি এবং একটি প্রতিনিধি যা পাস হবে তা গ্রহণ করবে method জেনেরিক প্যারামিটার এবং সংগ্রহ আইটেম উভয়ই রেফারেন্স দ্বারা। এটি স্ট্রাক্ট অ্যারেগুলির মতো প্রায় একই শব্দার্থতন্ত্রকে অনুমতি দেবে, তবে ভিবিএন.এন এবং সি # লোকেরা যদি একটি সুন্দর বাক্য গঠন উপস্থাপন করতে না পারে তবে কোডটি যথাযথভাবে সম্পাদন করা সত্ত্বেও (জেনেরিক প্যারামিটারটি পাস করা হবে) একটি স্থিতিশীল প্রতিনিধি ব্যবহারের জন্য অনুমতি দিন এবং কোনও অস্থায়ী শ্রেণীর উদাহরণ তৈরি করার কোনও প্রয়োজন এড়ানো হবে)।
ব্যক্তিগতভাবে, আমি এরিক লিপার্ট এট আল-এ ঘৃণা করি। পরিবর্তনীয় মান ধরণের সম্পর্কিত স্প। তারা পুরো জায়গা জুড়ে ব্যবহার করা হয় এমন প্রমিসু রেফারেন্স ধরণের চেয়ে অনেক ক্লিনার শব্দার্থ প্রস্তাব দেয় offer মান ধরণের জন্য। নেট এর সমর্থন সহ কিছু সীমাবদ্ধতা থাকা সত্ত্বেও, এমন অনেকগুলি ক্ষেত্রে রয়েছে যেগুলি পরিবর্তিত মানের ধরণগুলি অন্য কোনও ধরণের সত্তার চেয়ে ভাল ফিট।
int
, মিউটটেবল গুলি,bool
এস দাবি করার মতো এবং অন্য সমস্ত মানের ধরণেরটি মন্দ। পরিবর্তন ও অপরিবর্তনীয়তার জন্য মামলা রয়েছে cases এই ক্ষেত্রে ডেটা যে ভূমিকা পালন করে তার উপর নির্ভর করে, মেমরি বরাদ্দ / ভাগ করে নেওয়ার ধরণের নয়।