আমার # সি-তে ওওপি সম্পর্কে "সেরা অনুশীলন" প্রশ্ন রয়েছে (তবে এটি সাজানো-ই সমস্ত ভাষার ক্ষেত্রে প্রযোজ্য)।
জনসাধারণের কাছে প্রকাশিত হওয়া অবজেক্টের সাথে লাইব্রেরি ক্লাস থাকার কথা বিবেচনা করুন, সম্পত্তি অ্যাকসেসরের মাধ্যমে বলুন, তবে আমরা জনসাধারণ (এই গ্রন্থাগার বর্গ ব্যবহারকারী লোকেরা) এটি পরিবর্তন করতে চাই না।
class A
{
// Note: List is just example, I am interested in objects in general.
private List<string> _items = new List<string>() { "hello" }
public List<string> Items
{
get
{
// Option A (not read-only), can be modified from outside:
return _items;
// Option B (sort-of read-only):
return new List<string>( _items );
// Option C, must change return type to ReadOnlyCollection<string>
return new ReadOnlyCollection<string>( _items );
}
}
}
স্পষ্টতই সর্বোত্তম পন্থা হ'ল "অপশন সি", তবে খুব অল্প কিছু অবজেক্টের রিডইনলি ভেরিয়েন্ট থাকে (এবং অবশ্যই কোনও ব্যবহারকারী-সংজ্ঞায়িত শ্রেণীর এটি নেই)।
আপনি যদি ক্লাস এ এর ব্যবহারকারী হন, আপনি কি পরিবর্তনের আশা করতেন?
List<string> someList = ( new A() ).Items;
মূল (এ) অবজেক্টে প্রচার করুন? অথবা কোনও ক্লোনটি প্রদান করা ঠিক আছে যে এটি মন্তব্য / ডকুমেন্টেশনে তাই লেখা হয়েছিল? আমি মনে করি যে এই ক্লোন পদ্ধতির ফলে বেশ কঠিন-ট্র্যাক-ত্রুটি হতে পারে to
আমি মনে করি যে সি ++ তে আমরা কনস্ট অবজেক্টগুলি ফিরিয়ে দিতে পারতাম এবং আপনি কেবল তার উপর কনস্ট হিসাবে চিহ্নিত পদ্ধতিগুলিকে কল করতে পারেন। আমার ধারণা সি # তে তেমন কোনও বৈশিষ্ট্য / প্যাটার্ন নেই? যদি না হয় তবে তারা কেন এটি অন্তর্ভুক্ত করবে না? আমি বিশ্বাস করি এটাকে কনস্টেনস নির্ভুলতা বলা হয়।
তবে তারপরে আবার আমার মূল প্রশ্নটি "আপনি কী আশা করবেন" বা অপশন এ বনাম বি কীভাবে পরিচালনা করবেন তা নিয়ে is