[কলারমেমনারনাম] আইএনটিফাইপ্রোটারিচ্যাঞ্জড প্রয়োগ করার সময় বিকল্পগুলির সাথে তুলনা করা কি ধীর?


100

ভাল নিবন্ধ রয়েছে যা প্রয়োগের জন্য বিভিন্ন উপায়েINotifyPropertyChanged পরামর্শ দেয় ।

নিম্নলিখিত মৌলিক বাস্তবায়ন বিবেচনা করুন:

class BasicClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void FirePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private int sampleIntField;

    public int SampleIntProperty
    {
        get { return sampleIntField; }
        set
        {
            if (value != sampleIntField)
            {
                sampleIntField = value;
                FirePropertyChanged("SampleIntProperty"); // ouch ! magic string here
            }
        }
    }
}

আমি এটির সাথে এটি প্রতিস্থাপন করতে চাই:

using System.Runtime.CompilerServices;

class BetterClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    // Check the attribute in the following line :
    private void FirePropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private int sampleIntField;

    public int SampleIntProperty
    {
        get { return sampleIntField; }
        set
        {
            if (value != sampleIntField)
            {
                sampleIntField = value;
                // no "magic string" in the following line :
                FirePropertyChanged();
            }
        }
    }
}

তবে কখনও কখনও আমি পড়তে পারি যে [CallerMemberName]বিকল্পের তুলনায় গুণাবলীটির খারাপ অভিনয় রয়েছে। এটা কি সত্য এবং কেন? এটি প্রতিবিম্ব ব্যবহার করে?

উত্তর:


205

না, উপরের বেসিক প্রয়োগের চেয়ে ধীরগতিতে ব্যবহার করা [CallerMemberName]যায় না ।

এটি কারণ, এই এমএসডিএন পৃষ্ঠা অনুসারে ,

সংকলনের সময় কলকারী তথ্য মানগুলি ইন্টারমিডিয়েট ল্যাঙ্গুয়েজে (আইএল) আক্ষরিক হিসাবে নির্গত হয়

আমরা যে কোনও আইএল বিচ্ছিন্নকরণকারী ( আইএলএসপি এর মতো ) এর সাথে এটি পরীক্ষা করতে পারি : সম্পত্তির "সেট" অপারেশনের কোডটি ঠিক একইভাবে সংকলিত হয়েছে: কলার মেম্বারনামের সাথে সংঘবদ্ধ সম্পত্তি

সুতরাং এখানে প্রতিবিম্ব কোন ব্যবহার।

(নমুনা ভিএস ২০১৩ এর সাথে সংকলিত)


4
একই লিঙ্কটি, তবে ফরাসি এর পরিবর্তে ইংরাজীতে: এমএসডিএন.মাইক্রোসফট /en-us/library/hh534540(v=vs.110).aspx
— মাইক ডি ক্লার্ক

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