উত্তর:
হ্যাঁ, উভয়ই কেবল পঠনযোগ্য, তবে একটি পার্থক্য রয়েছে। প্রথমটিতে, একটি ব্যাকিং ফিল্ড রয়েছে যা কনস্ট্রাক্টর কার্যকর হওয়ার আগে 0 থেকে শুরু করা হয়। আপনি নিয়মিত কেবল পঠনযোগ্য ক্ষেত্রের মতোই কেবল নির্মাণকারীর মধ্যেই মানটি পরিবর্তন করতে পারেন । গেটর নিজেই কেবল ক্ষেত্রের মান প্রদান করে।
দ্বিতীয়টিতে, প্রাপ্ত ব্যক্তিটি প্রতিবার কেবল 0 প্রত্যাবর্তন করে, এতে কোনও ক্ষেত্র জড়িত নেই।
সুতরাং যেকোনও স্বয়ংক্রিয়ভাবে প্রয়োগ করা বৈশিষ্ট্য বা অভিব্যক্তি-দেহী সদস্যদের ব্যবহার এড়াতে আমাদের কাছে রয়েছে:
প্রথম সংস্করণ
private readonly int _number = 0;
public int Number { get { return _number; } }
দ্বিতীয় সংস্করণ
public int Number { get { return 0; } }
পার্থক্যের একটি সুস্পষ্ট উদাহরণ এটির মতো দেখা যেতে পারে:
public DateTime CreationTime { get; } = DateTime.UtcNow;
public DateTime CurrentTime => DateTime.UtcNow;
আপনি যদি একটি একক অবজেক্ট তৈরি করেন তবে এর CreationTime
সম্পত্তি সর্বদা একই ফল দেবে - কারণ এটি কেবলমাত্র পাঠ্যক্ষেত্রে সঞ্চিত, অবজেক্ট নির্মাণে আরম্ভ করা। যাইহোক, আপনি যতবার CurrentTime
সম্পত্তিতে অ্যাক্সেস করবেন , DateTime.UtcNow
ততবার মূল্যায়নের কারণ হবে , তাই আপনি সম্ভাব্য ভিন্ন ফলাফল পাবেন।
একটি পার্থক্য হ'ল যখন এটি 0
মূল্যায়ন করা হয়: অবজেক্ট তৈরির সময় বা সম্পত্তি ব্যবহার করার সময়।
ডেটটাইম বৈশিষ্ট্যগুলির সাথে আপনি এটি আরও ভাল দেখতে পারেন:
class SomeTestClass
{
public DateTime Start { get; } = DateTime.Now;
public DateTime Now => DateTime.Now;
}
Start
সম্পত্তি, (যখন উদাহরণস্বরূপ তৈরি করা হয়েছে এর) একই সময় ফিরে যখন রাখে Now
পরিবর্তন বর্তমান সময় প্রতিফলিত।
ব্যাখ্যা :
প্রথম সংস্করণ ("স্টার্ট") একটি প্রাথমিক মান সরবরাহ করে যা এমনকি নির্মাণকারীর দ্বারা ওভাররাইট করা যেতে পারে। সুতরাং এটি একবার মূল্যায়ন করা হয়।
দ্বিতীয় সংস্করণ ("এখন") এমন ভাব প্রকাশ করে যা এই সম্পত্তিটির "প্রাপ্তি" হবে। সুতরাং প্রতিবার সম্পত্তিটি পড়ার সময় এটি মূল্যায়ন করা হয়। এমনকী কোনও ব্যাকিং ফিল্ডও নেই যা নির্মাণকারী ওভাররাইট করতে পারে।
এগুলি সি # 6 ভাষার বৈশিষ্ট্য।
প্রথম উদাহরণ
public int Number { get; } = 0
প্রথম উদাহরণটি কেবলমাত্র গেটর-অটো সম্পত্তি । কেবলমাত্র গেটর-অটো-প্রপার্টিটির ব্যাকিং ফিল্ডকে স্পষ্টতই পঠনযোগ্য হিসাবে ঘোষণা করা হয়েছে।
দ্বিতীয় উদাহরণ
public int Number => 0;
এবং দ্বিতীয় উদাহরণ হ'ল সম্পত্তি-মত ফাংশন সদস্যদের মত প্রকাশের সংস্থা । মনে রাখবেন যে কোনও get
কীওয়ার্ড নেই: এটি অভিব্যক্তি বডি সিনট্যাক্স ব্যবহারের দ্বারা নিহিত।
দুজনেই পঠনযোগ্য।
random.NextInt()
। প্রথম সংস্করণ একবার মূল্যায়ন করবে এবং সর্বদা একই মান হবে। দ্বিতীয়টি প্রতিবার একটি নতুন মান ফিরে আসবে।