মূল কারণ / সমস্যা হ'ল সিএলএস স্পেসিফিকেশনের ডিজাইনাররা (যেটি ভাষা কীভাবে নেট ব্যবহার করে তা সংজ্ঞায়িত করে) এমন কোনও উপায় নির্দিষ্ট করে না যার মাধ্যমে শ্রেণীর সদস্যরা নির্দিষ্ট callvirt
করে ডাকারকে ছাড়াই সরাসরি ডাকতে হবে বলে উল্লেখ করতে পারে নাল-রেফারেন্স চেক; বা এটি কোনও কাঠামো নির্ধারণের অর্থ প্রদান করে নি যা "স্বাভাবিক" বক্সিংয়ের সাপেক্ষে নয়।
সিএলএসের স্পেসিফিকেশনটি যদি কোনও উপায় সংজ্ঞায়িত করে, তবে। নেট পক্ষে কমন অবজেক্ট মডেল (সিওএম) দ্বারা প্রতিষ্ঠিত নেতৃত্বকে ধারাবাহিকভাবে অনুসরণ করা সম্ভব হত, যার অধীনে নাল স্ট্রিংয়ের রেফারেন্স শব্দার্থগতভাবে একটি খালি স্ট্রিংয়ের সমতুল্য হিসাবে বিবেচিত হত এবং অন্যটির জন্য ব্যবহারকারী-সংজ্ঞায়িত অপরিবর্তনীয় শ্রেণীর ধরণের যা মান শব্দার্থবিজ্ঞান একইভাবে ডিফল্ট মানগুলি সংজ্ঞায়িত করতে পারে বলে মনে করা হয়। মূলত, কি ঘটতে প্রতিটি সদস্য হতে হতো String
, যেমন Length
ভালো কিছু হিসেবে লেখা হবে [InvokableOnNull()] int String Length { get { if (this==null) return 0; else return _Length;} }
। এই পদ্ধতির জন্য মূল্যগুলির মতো আচরণ করা উচিত এমন জিনিসগুলির জন্য খুব সুন্দর শব্দার্থবিজ্ঞানের প্রস্তাব দেওয়া হত তবে বাস্তবায়নের কারণে সমস্যাগুলির গাদাতে রাখা দরকার need এই পদ্ধতির সাথে সবচেয়ে বড় অসুবিধা হ'ল এই ধরণের এবং এর মধ্যে রূপান্তরটির শব্দার্থক শব্দObject
শব্দগুলি কিছুটা দুর্বল হতে পারে।
একটি বিকল্প পদ্ধতির বিশেষ কাঠামোগত ধরণের সংজ্ঞা দেওয়া যা তাদের উত্তরাধিকার সূত্রে প্রাপ্ত হয় নি Object
তবে তার পরিবর্তে কাস্টম বক্সিং এবং আনবক্সিং অপারেশন ছিল (যা অন্য কোনও শ্রেণীর ধরণের / থেকে রূপান্তরিত হবে)। এই ধরণের পদ্ধতির অধীনে, একটি শ্রেণীর ধরণ থাকবে NullableString
যা স্ট্রিং এখনকার মতো আচরণ করে এবং একটি কাস্টম-বক্সযুক্ত স্ট্রাক্ট প্রকার String
, যা একক ব্যক্তিগত Value
প্রকারের ব্যক্তিগত ক্ষেত্র ধারণ করবে String
। এটিকে রূপান্তর করার চেষ্টা করা String
হচ্ছে NullableString
বা শূন্য হলে, বা যদি নাল হয় Object
তবে ফিরে আসবে । কাস্ট করার চেষ্টা করা হচ্ছে , কোনও উদাহরণের একটি নন-নাল রেফারেন্সটি রেফারেন্সটি এতে সংরক্ষণ করবেValue
String.Empty
String
NullableString
Value
সংরক্ষণ করবে (সম্ভবত দৈর্ঘ্য শূন্য হলে নাল সংরক্ষণ করা হবে); অন্য কোনও রেফারেন্স ingালাই একটি ব্যতিক্রম ছুঁড়ে ফেলবে।
যদিও স্ট্রিং গাদা সংরক্ষণ করা হবে, সেখানে ধারণার দিক থেকে কোনো কারণ কেন তারা না একটি আচরণ মান ধরনের একটি অ-নাল ডিফল্ট মান যে ভালো। এগুলি একটি "সাধারণ" কাঠামো হিসাবে সংরক্ষণ করা হয়েছে যা একটি রেফারেন্স ধারণ করে এমন কোডের জন্য দক্ষ ছিল যা "স্ট্রিং" টাইপ হিসাবে তাদের ব্যবহার করত, তবে "অবজেক্ট" এ কাস্ট করার সময় ইন্ডিয়ারেশন এবং অদক্ষতার একটি অতিরিক্ত স্তর যুক্ত করত। যদিও আমি শেষ মুহূর্তে উপরের বৈশিষ্ট্যগুলির মধ্যে কোনও যোগ করার পূর্বেই ধারণা করি না, সম্ভবত ভবিষ্যতের ফ্রেমওয়ার্কগুলির ডিজাইনারগুলি সেগুলি অন্তর্ভুক্ত করে বিবেচনা করতে পারে।