সি # 8 এ অজানা নালাগ্যতা কী?


12

সি # 8.0 এ আমরা সংক্ষিপ্ত রেফারেন্স ধরণের থাকতে পারি। দস্তাবেজগুলি উল্লেখ করে যে এখানে 4 ধরণের নালিয়াযোগ্যতা রয়েছে। প্রথম 3 টি বেশ পরিষ্কার তবে আমি "অজানা" এর বিন্দুটি বুঝতে ব্যর্থ হয়েছি। দস্তাবেজগুলি বলে যে এটি জেনেরিকের সাথে ব্যবহৃত হয় তবে আমি যখন জেনেরিক মধ্যে টি টাইপের একটি অনিয়ন্ত্রিত ভেরিয়েবলের কোনও পদ্ধতিতে কল করার চেষ্টা করি তখন এটি কেবল সতর্ক করে দেয় যে প্রকারটি নিকৃষ্ট হয়। আমি অজানা এবং naclable মধ্যে পার্থক্য দেখতে ব্যর্থ। অজানা কেন বিদ্যমান? কীভাবে তা প্রকাশ পায়?

উত্তর:


12

নিম্নলিখিত জেনেরিক পদ্ধতি নিন:

public static T Get<T>(T value)
{
    return value;
}

যদি আমরা এটির মতো বলে থাকি Get<string>(s)তবে রিটার্নটি অযোগ্য হয়, এবং যদি আমরা Get<string?>(s)এটি করি তবে এটি আক্রান্ত।

তবে আপনি যদি জেনেরিক আর্গুমেন্টের সাথে কল করে থাকেন Get<T>(x)এবং এর Tসমাধান না করেন, উদাহরণস্বরূপ এটি নীচের মতো আপনার জেনেরিক শ্রেণির পক্ষে জেনেরিক যুক্তি ...

class MyClass<T>
{
    void Method(T x)
    {
        var result = Get<T>(x);
        // is result nullable or non-nullable? It depends on T
    }
}

এখানে সংকলক জানে না যে শেষ পর্যন্ত এটি একটি nullable বা নন-অযোগ্য প্রকারের সাথে ডাকা হবে।

এমন একটি নতুন ধরণের প্রতিবন্ধকতা রয়েছে যা আমরা সিগন্যাল করতে ব্যবহার করতে Tপারি যা বাতিল হতে পারে না:

public static T Get<T>(T value) where T: notnull
{
    return value;
}

যাইহোক, যেখানে নিয়ন্ত্রণহীন Tএবং এখনও খোলা আছে, এর শোধরতা অজানা।

যদি এই অজানাগুলিকে হ্রাসযোগ্য হিসাবে ধরা হয় তবে আপনি নিম্নলিখিত কোডটি লিখতে পারেন:

class MyClass<T>
{
    void Method(T x)
    {
        var result = Get<T>(x);
        // reassign result to null, cause we we could if unknown was treated as nullable
        result = null;
    }
}

ক্ষেত্রে যেখানে Tঅযোগ্য ছিল না, আমাদের একটি সতর্কতা পাওয়া উচিত ছিল। সুতরাং অজানা nullability ধরণের সঙ্গে, আমরা dereferences যখন সতর্কতা চান, কিন্তু সম্ভাব্য বরাদ্দ জন্য সতর্কতা null


যখন আমি var ফলাফল করি = পরীক্ষা করুন <<T> (এক্স) পান; result.ToString (); সংকলকটি সম্ভবত একটি নাল মানকে অবজ্ঞার বিষয়ে অভিযোগ করে। আমি দেখতে পাচ্ছি না যে এই ক্ষেত্রে কেবল অজ্ঞাতসারে অজানা থেকে আলাদা is
স্টিলগার

1
সতর্কতার ক্ষেত্রে তারা একই রকম আচরণ করে তবে শব্দার্থগতভাবে তারা আলাদা different আপনি পার্থক্যটি একাডেমিক বলে বলতে পারেন, এবং এটি যদি আপনার বক্তব্য হয় তবে আমি সম্মত।
স্টুয়ার্ট

1
আমি তবুও জানতে চাই কেন পার্থক্যটি চালু হয়েছিল। একাডেমিক উদ্দেশ্যে ভাষার ক্ষেত্রে এইরকম পার্থক্য প্রবর্তন করা আশ্চর্যজনক বলে মনে হয়।
স্টিলগার

আমার খারাপ, কেবলমাত্র অনুমানটি পুনরায় পড়ুন, উত্তরটি আপডেট করুন, শেষ অংশটি এটি ব্যাখ্যা করে।
স্টুয়ার্ট

1
আহ এটি আরও পছন্দ
স্টিলগার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.