এটি এমএসডিএন ম্যাগাজিনের নিবন্ধ 'সি #: দ্য নিউ এবং উন্নত সি # 6.0' হিসাবে আলোচিত হিসাবে "গেটর-ওয়ানও-অ্যাটোর প্রোপার্টিস" হিসাবে পরিচিত, এটি একটি নতুন সি # 6 বৈশিষ্ট্য " মাইকেলিস এবং সি # 6.0 খসড়া ভাষায় নির্দিষ্টকরণ ।
কেবলমাত্র পঠনযোগ্য ক্ষেত্রের সেটারটি কেবল নির্মাত্রে অ্যাক্সেসযোগ্য, অন্যান্য সমস্ত পরিস্থিতিতে ক্ষেত্রটি এখনও কেবল পঠনযোগ্য এবং আগের মতো আচরণ করে।
আপনার টাইপ করতে হবে এমন কোডের পরিমাণ হ্রাস করার জন্য এবং মানটি ধরে রাখার জন্য একটি প্রাইভেট মডিউল স্তরের ভেরিয়েবল স্পষ্টভাবে ঘোষণা করার প্রয়োজনীয়তা অপসারণ করার জন্য এটি একটি সুবিধাযুক্ত বাক্য গঠন।
এই বৈশিষ্ট্যটি ততটা গুরুত্বপূর্ণ হিসাবে দেখা গিয়েছিল, যেহেতু সি # 3 এ অটো-ইমপ্লিমেন্টেড প্রপার্টি প্রবর্তন করা হয়েছিল, পরিবর্তনীয় বৈশিষ্ট্যগুলি (যারা গেটর এবং সেটারযুক্ত) অপরিবর্তনীয় ব্যক্তিদের (কেবলমাত্র প্রাপ্তিযুক্ত) এর চেয়ে বেশি দ্রুত লেখা শুরু করেছিল, যার অর্থ লোকেরা ছিল সাধারণত পঠনযোগ্য বৈশিষ্ট্যগুলির জন্য প্রয়োজনীয় ব্যাকিং ফিল্ডের জন্য কোড টাইপ না করাতে পরিবর্তনীয় বৈশিষ্ট্যগুলি ব্যবহার করার প্রলোভন দেখানো হচ্ছে। মাইক্রোসফ্ট সি # প্রোগ্রামিং গাইডের প্রাসঙ্গিক বিভাগে স্ব-প্রয়োগকারী বৈশিষ্ট্যগুলির বিষয়ে আরও আলোচনা রয়েছে ।
এই ব্লগ পোস্ট, '# 1,207 - সি # 6.0 - শন সেক্সটনের রচনা-পাঠযোগ্য সম্পত্তিগুলির জন্য অটো-প্রপার্টি ইনিশিয়ালাইজারগুলি' এর ভাল ব্যাখ্যা এবং উদাহরণ রয়েছে:
সি # .0.০ এর পূর্বে, আপনি যদি কেবল পঠনযোগ্য (অপরিবর্তনীয়) সম্পত্তি চান, তবে আপনি সাধারণত নীচে দেখানো হিসাবে কেবল কনস্ট্রাক্টরটিতে আরম্ভ হওয়া একটি পঠনযোগ্য ব্যাকিং ফিল্ড ব্যবহার করতে চান।
public class Dog
{
public string Name { get; set; }
private readonly DateTime creTime;
public DateTime DogCreationTime
{
get { return creTime; }
}
public Dog(string name)
{
Name = name;
creTime = DateTime.Now;
}
}
সি # 6.0 এ, আপনি কেবলমাত্র পঠনযোগ্য সম্পত্তি প্রয়োগ করতে স্ব-বাস্তবায়িত বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। আপনি একটি অটো-প্রপার্টি আরম্ভকারী ব্যবহার করে এটি করেন। ফলাফলটি উপরের উদাহরণের তুলনায় অনেক পরিষ্কার, যেখানে আমাদের স্পষ্টভাবে একটি ব্যাকিং ফিল্ড ঘোষণা করতে হয়েছিল।
public class Dog
{
public string Name { get; set; }
public DateTime DogCreationTime { get; } = DateTime.Now;
public Dog(string name)
{
Name = name;
}
}
গিটহাবের ডটনেট রোজলিন রেপোতে আরও বিশদ পাওয়া যাবে :
অটো-প্রোপার্টি এখন সেটর ছাড়াই ঘোষণা করা যেতে পারে।
কেবলমাত্র গেটর-অটো-প্রপার্টিটির ব্যাকিং ফিল্ডকে স্পষ্টতই পঠনযোগ্য হিসাবে ঘোষণা করা হয়েছে (যদিও এটি কেবল প্রতিচ্ছবি উদ্দেশ্যে বিবেচিত)। উপরের উদাহরণের মতো এটি সম্পত্তিতে একটি ইনিশিয়ালাইজারের মাধ্যমে সূচনা করা যেতে পারে। এছাড়াও, ঘোষক প্রকারের কনস্ট্রাক্টর বডিতে একটি গেটর-কেবল সম্পত্তি অর্পণ করা যেতে পারে, যার ফলে মানটি অন্তর্নিহিত ক্ষেত্রটিতে সরাসরি নির্ধারিত হয়:
এটি আরও সংক্ষিপ্তভাবে প্রকারগুলি প্রকাশ করার বিষয়ে, তবে নোট করুন যে এটি পরিবর্তনীয় এবং অপরিবর্তনীয় প্রকারের মধ্যে ভাষার একটি গুরুত্বপূর্ণ পার্থক্যকে সরিয়ে দেয়: স্বয়ং শ্রেণীর বৈশিষ্ট্যগুলি কেবল তখনই উপলব্ধ ছিল যদি আপনি নিজের শ্রেণিকে পরিবর্তনযোগ্য করতে ইচ্ছুক হন, এবং তাই ডিফল্ট হওয়ার প্রলোভন যে মহান ছিল। এখন, কেবল গেটর-অটো-বৈশিষ্ট্য সহ, প্লেয়িং ফিল্ডটি পরিবর্তনীয় এবং অপরিবর্তনীয় মধ্যে সমতল করা হয়েছে।
এবং সি # 6.0 খসড়া ভাষায় স্পেসিফিকেশন (এনবি: মাইক্রোসফ্ট সম্পর্কিত হিসাবে ভাষা স্পেসিফিকেশন চূড়ান্ত, তবে এটি এখনও EMCA / ISO স্ট্যান্ডার্ড হিসাবে অনুমোদিত হয়নি , সুতরাং 'খসড়া'):
স্বয়ংক্রিয়ভাবে প্রয়োগ করা বৈশিষ্ট্য
একটি স্বয়ংক্রিয়ভাবে প্রয়োগ করা সম্পত্তি (বা সংক্ষেপে স্ব-সম্পত্তি), সেমিকোলন-কেবলমাত্র অ্যাকসেসর বডিসহ একটি অ-বিমূর্ত অ-বহিরাগত সম্পত্তি। অটো-প্রোপার্টিগুলির অবশ্যই একটি গেট অ্যাকসেসর থাকতে হবে এবং optionচ্ছিকভাবে একটি সেট অ্যাক্সেসর থাকতে পারে।
যখন কোনও সম্পত্তি স্বয়ংক্রিয়ভাবে প্রয়োগকৃত সম্পত্তি হিসাবে নির্দিষ্ট করা হয়, তখন কোনও গোপন ব্যাকিং ক্ষেত্র সম্পত্তির জন্য স্বয়ংক্রিয়ভাবে উপলব্ধ হয় এবং অ্যাক্সেসরগুলি সেই ব্যাকিং ফিল্ডটি পড়তে এবং লিখতে প্রয়োগ করা হয়। যদি অটো-সম্পত্তিটির কোনও সেট অ্যাক্সেসর না থাকে তবে ব্যাকিং ফিল্ডটি কেবল পঠনযোগ্য (কেবল পঠনযোগ্য ক্ষেত্র) হিসাবে বিবেচিত হবে। কেবলমাত্র পঠনযোগ্য ক্ষেত্রের মতো, ঘেরযুক্ত শ্রেণির একজন নির্মাণকারীর শরীরে কেবল গেটর-অটো-সম্পত্তিও বরাদ্দ করা যেতে পারে। এই জাতীয় কার্যভারটি সম্পত্তির পঠনযোগ্য ব্যাকিং ফিল্ডে সরাসরি বরাদ্দ করে।
একটি স্ব-সম্পত্তিতে optionচ্ছিকভাবে সম্পত্তি_initializer থাকতে পারে, যা ভেরিয়েবল_আইনিটিয়ালাইজার (ভেরিয়েবল আরম্ভকারী) হিসাবে সরাসরি ব্যাকিং ফিল্ডে প্রয়োগ করা হয়।