c# - সি#স্বয়ংক্রিয়-বৈশিষ্ট্যাবলী সূচনা করা হচ্ছে




initialization automatic-properties (3)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

আমি এই ধরনের ক্লাস লেখার জন্য ব্যবহার করছি:

public class foo {
  private string mBar = "bar";
  public string Bar {
    get { return mBar; }
    set { mBar = value; }
  }
  //... other methods, no constructor ...
}

একটি স্বয়ং-সম্পত্তি থেকে বারটি রূপান্তরিত করা সহজ এবং সংক্ষিপ্ত বলে মনে হয় তবে আমি কীভাবে কনস্ট্রাকটর যুক্ত না করে সেখানে প্রারম্ভিকতা বজায় রাখতে পারি?

public class foo2theRevengeOfFoo {
  //private string mBar = "bar";
  public string Bar { get; set; }
  //... other methods, no constructor ...
  //behavior has changed.
}

আপনি দেখতে পারেন যে কোনও কনস্ট্রাকটর যোগ করাটি স্বয়ং-সম্পত্তি থেকে প্রাপ্ত হওয়া প্রচেষ্টার সাথে ইনলাইন নয়।

এই মত কিছু আমার আরো জ্ঞান করবে:

public string Bar { get; set; } = "bar";

আপনি আপনার ক্লাসের কনস্ট্রাকটর এর মাধ্যমে এটি করতে পারেন:

public class foo {
  public foo(){
    Bar = "bar";
  }
  public string Bar {get;set;}
}

যদি আপনার অন্য কনস্ট্রাক্টর (অর্থাত্, যেটি প্যারামিটার নেয়) অথবা কন্সট্রাক্টরগুলির একটি গুচ্ছ আছে তবে আপনি সর্বদা এটি রাখতে পারেন (কন্সট্রকটর চেইনিং বলা হয়):

public class foo {
  private foo(){
    Bar = "bar";
    Baz = "baz";
  }
  public foo(int something) : this(){
    //do specialized initialization here
    Baz = string.Format("{0}Baz", something);
  }
  public string Bar {get; set;}
  public string Baz {get; set;}
}

আপনি সর্বদা ডিফল্ট কন্সট্রাকটরকে একটি কল শৃঙ্খল দিলে আপনার সমস্ত ডিফল্ট সম্পত্তি সূচনা সেট সেখানে থাকতে পারে। যখন শৃঙ্খলাবদ্ধ হয়, তখন শৃঙ্খলাবদ্ধ কনস্ট্রাক্টরকে কলিং কন্সট্রকটরের আগে ডাকা হবে যাতে আপনার আরও বিশেষ কন্সট্রকটার প্রযোজ্য হিসাবে বিভিন্ন ডিফল্ট সেট করতে সক্ষম হবেন।


এটি সি # 6.0 তে সম্ভব হবে:

public int Y { get; } = 2;

হালনাগাদ - নীচের উত্তর সি # 6 বরাবর এসেছিলেন আগে লেখা হয়েছিল। সি # 6 এ আপনি লিখতে পারেন:

public class Foo
{
    public string Bar { get; set; } = "bar";
}

আপনি শুধুমাত্র-পাঠযোগ্য স্বয়ংক্রিয়ভাবে-প্রয়োগ করা বৈশিষ্ট্যগুলি লিখতে পারেন, যা শুধুমাত্র কন্সট্রকটারে লেখার যোগ্য (তবে ডিফল্ট প্রাথমিক মানও দেওয়া যেতে পারে:

public class Foo
{
    public string Bar { get; }

    public Foo(string bar)
    {
        Bar = bar;
    }
}

এটা দুর্ভাগ্যজনক যে এই মুহূর্তে এটি করার কোন উপায় নেই। আপনি কনস্ট্রাক্টর মান সেট করতে হবে। (কন্সট্রাকটর চেইনার ব্যবহার করে সদৃশ এড়াতে সাহায্য করতে পারে।)

স্বয়ংক্রিয়ভাবে বাস্তবায়িত বৈশিষ্ট্য অধিকার এখন সহজ, কিন্তু অবশ্যই নিকার হতে পারে। আমি নিজে নিজে এই ধরণের সূচনাটি চাই না যা প্রায়শই কেবল পঠনযোগ্য স্বয়ংক্রিয়ভাবে বাস্তবায়িত সম্পত্তি যা শুধুমাত্র কন্সট্রকটারে সেট করা যেতে পারে এবং শুধুমাত্র পাঠযোগ্য ক্ষেত্র দ্বারা সমর্থিত হবে।

এটি সি এবং # 5 সহ পর্যন্ত ঘটেনি, তবে সি # 6-এর জন্য পরিকল্পনা করা হচ্ছে - উভয় ঘোষণার বিন্দুতে প্রাথমিকভাবে অনুমতি দেওয়ার শর্তাবলী এবং কেবলমাত্র কন্সট্রাক্টর শরীরের মধ্যে পাঠযোগ্য কেবলমাত্র প্রয়োগযোগ্য বৈশিষ্ট্যগুলি পড়ার অনুমতি দেয়।





automatic-properties