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


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.