যখন কেবলমাত্র পঠনযোগ্য এবং কেবলমাত্র বৈশিষ্ট্যগুলি ব্যবহার করা উচিত


100

.NET অ্যাপ্লিকেশনে কখন আমার "ReadOnly" বৈশিষ্ট্যগুলি ব্যবহার করা উচিত এবং কখন আমার "get" ব্যবহার করা উচিত। এই দুই এর মধ্যে পার্থক্য কি.

private readonly double Fuel= 0;

public double FuelConsumption
{
    get
    {
        return Fuel;
    }
}        

বা

private double Fuel= 0;

public double FuelConsumption
{
     get
     {
          return Fuel;
     }
}

12
সি #> 5 এর জন্য প্রাপ্ত সম্পত্তি হ্রাস করা যেতে পারেpublic double FuelConsumption => Fuel;
— meJustAndrew

উত্তর:


121

কেবলমাত্র একজন গেটারের সাথে সম্পত্তি তৈরি করা আপনার শ্রেণীর বাইরে থাকা কোনও কোডের জন্য আপনার সম্পত্তি কেবল পঠনযোগ্য করে তোলে।

তবে আপনি আপনার শ্রেণীর সরবরাহিত পদ্ধতিগুলি ব্যবহার করে মানটি পরিবর্তন করতে পারেন:

public class FuelConsumption {
    private double fuel;
    public double Fuel
    {
        get { return this.fuel; }
    }
    public void FillFuelTank(double amount)
    {
        this.fuel += amount;
    }
}

public static void Main()
{
    FuelConsumption f = new FuelConsumption();

    double a;
    a = f.Fuel; // Will work
    f.Fuel = a; // Does not compile

    f.FillFuelTank(10); // Value is changed from the method's code
}

আপনার শ্রেণীর ব্যক্তিগত ক্ষেত্রটি হিসাবে readonlyসেট করা আপনাকে কেবলমাত্র একবার ক্ষেত্রের মান সেট করতে দেয় (কোনও ইনলাইন অ্যাসাইনমেন্ট ব্যবহার করে বা শ্রেণি নির্মাত্রে)। আপনি এটি পরে পরিবর্তন করতে পারবেন না।

public class ReadOnlyFields {
    private readonly double a = 2.0;
    private readonly double b;

    public ReadOnlyFields()
    {
        this.b = 4.0;
    }
}

readonly শ্রেণি ক্ষেত্রগুলি প্রায়শই পরিবর্তনশীলগুলির জন্য ব্যবহৃত হয় যা শ্রেণি নির্মানের সময় আরম্ভ হয় এবং পরে আর কখনও পরিবর্তন করা হবে না।

সংক্ষেপে, আপনার যদি নিজের সম্পত্তির মান বাইরের থেকে কখনই পরিবর্তন করা যায় না তা নিশ্চিত করার প্রয়োজন হয় তবে আপনার শ্রেণি কোডের মধ্যে থেকে এটি পরিবর্তন করতে সক্ষম হওয়া দরকার, "গেট-ওয়ান" সম্পত্তিটি ব্যবহার করুন।

আপনার যদি এমন কোনও মান সঞ্চয় করতে হয় যা এর প্রাথমিক মান সেট হয়ে যাওয়ার পরে কখনও পরিবর্তন হয় না, একটি readonlyক্ষেত্র ব্যবহার করুন ।


14
কোড উদাহরণের জন্য + 1। তবে এটি পরিষ্কার করে দেওয়া দরকার যে ক্লাসের ক্ষেত্রগুলিতে আবৃত হওয়ার পরে কেবল "গেট-ওয়ান" বৈশিষ্ট্যগুলি ক্লাস পদ্ধতি দ্বারা সংশোধন করা যেতে পারে। সেস্টার না থাকলে এমনকি ক্লাসের পদ্ধতি দ্বারাও তারা সরাসরি সংশোধন করতে পারে না। এবং এটি করার চেষ্টা করার ফলে সংকলক ত্রুটি হবে।
— দেবরাজ গাদাবী

13

সি # 6 হিসাবে আপনি এক লাইনে 'কেবল পঠনযোগ্য অটো-সম্পত্তি' ঘোষণা এবং সূচনা করতে পারেন:

double FuelConsumption { get; } = 2;

আপনি নির্ধারক থেকে মান সেট করতে পারেন তবে অন্যান্য পদ্ধতি নয়।


7

কেবলমাত্র প্রাপ্তিযুক্ত এমন একটি সম্পত্তি কেবল পাঠযোগ্য বলে বলা হয়। সম্পত্তি (বাইরে থেকে) এর মান পরিবর্তন করতে কোনও সেটার সরবরাহ করা হয়নি।

সি # এর একটি কীওয়ার্ড কেবল পঠনযোগ্য রয়েছে যা ক্ষেত্রগুলিতে ব্যবহার করা যেতে পারে (বৈশিষ্ট্য নয়)। এমন একটি ক্ষেত্র যা "কেবলমাত্র পঠনযোগ্য" হিসাবে চিহ্নিত হয়েছে, কেবলমাত্র কোনও অবজেক্ট তৈরির সময় (কনস্ট্রাক্টারে) সেট করা যেতে পারে।

private string _name = "Foo"; // field for property Name;
private bool _enabled = false; // field for property Enabled;

public string Name{ // This is a readonly property.
  get {
    return _name;  
  }
}

public bool Enabled{ // This is a read- and writeable property.
  get{
    return _enabled;
  }
  set{
    _enabled = value;
  }
} 

2

ব্যর্থ-নিরাপদ কোড তৈরি করতে কেবল পঠনযোগ্য বৈশিষ্ট্য ব্যবহৃত হয়। আমি সম্পত্তি এবং ব্যাকিং ক্ষেত্রগুলি সম্পর্কে মার্ক সিম্যানের এনক্যাপসুলেশন পোস্ট সিরিজটি সত্যিই পছন্দ করি:

http://blog.ploeh.dk/2011/05/24/PokayokeDesignFromSmellToFragrance.aspx

মার্ক উদাহরণ থেকে নেওয়া:

public class Fragrance : IFragrance
{
    private readonly string name;

    public Fragrance(string name)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }

        this.name = name;
    }

    public string Spread()
    {
        return this.name;
    }
}

শ্রেণীর আক্রমণকারী সর্বদা বৈধ কিনা তা নিশ্চিত করতে আপনি এই উদাহরণে কেবল পঠনযোগ্য নাম ক্ষেত্রটি ব্যবহার করেন। এক্ষেত্রে শ্রেণি রচয়িতা নিশ্চিত করতে চেয়েছিলেন যে নাম ক্ষেত্রটি একবারে (স্থাবর) সেট করা থাকে এবং সর্বদা উপস্থিত থাকে।


0

পদ্ধতিগুলি নির্দেশ করে যে মানটি ফেরত দেওয়ার জন্য কিছু ঘটতে হবে, বৈশিষ্ট্যগুলি পরামর্শ দেয় যে মানটি ইতিমধ্যে রয়েছে। এটি থাম্বের একটি নিয়ম, কখনও কখনও আপনি কোনও সম্পত্তি চান যা কিছু কাজ করে (যেমন Count), তবে সাধারণত এটি সিদ্ধান্ত নেওয়ার জন্য একটি কার্যকর উপায়।

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