আমার একটি বিমূর্ত বেস শ্রেণি আছে এবং আমি এই ক্ষেত্র বা এমন একটি সম্পত্তি ঘোষণা করতে চাই যে এই প্যারেন্ট বর্গ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত প্রতিটি শ্রেণিতে আলাদা আলাদা মান থাকবে।
আমি এটি বেসক্লাসে সংজ্ঞায়িত করতে চাই যাতে আমি এটি একটি বেস শ্রেণীর পদ্ধতিতে উল্লেখ করতে পারি - উদাহরণস্বরূপ টোস্ট্রিংকে ওভাররাইড করে বলতে হবে "এই অবজেক্টটি সম্পত্তি / ক্ষেত্রের ধরণের "। আমি এটি করার জন্য দেখতে পাবার তিনটি উপায় পেয়েছি তবে আমি ভাবছিলাম - এটি করার সর্বোত্তম বা স্বীকৃত উপায় কোনটি? নবাগত প্রশ্ন, দুঃখিত।
বিকল্প 1:
একটি বিমূর্ত সম্পত্তি ব্যবহার করুন এবং উত্তরাধিকারসূত্রে প্রাপ্ত শ্রেণিতে ওভাররাইড করুন। প্রয়োগ করা থেকে এটি উপকার হয় (আপনার এটিকে ওভাররাইড করতে হবে) এবং এটি পরিষ্কার। তবে, কোনও ক্ষেত্রকে encapsulate না করে হার্ড-কোড মানটি ফিরিয়ে দেওয়া কিছুটা ভুল বলে মনে হচ্ছে এবং এটি কেবলমাত্র পরিবর্তে কোডের কয়েকটি লাইন। আমাকে "সেট" এর জন্য একটি বডিও ঘোষণা করতে হবে তবে এটি কম গুরুত্বপূর্ণ (এবং সম্ভবত এটি অবহিত করার কোনও উপায় আছে যা সম্পর্কে আমি অবগত নই)।
abstract class Father
{
abstract public int MyInt { get; set;}
}
class Son : Father
{
public override int MyInt
{
get { return 1; }
set { }
}
}
বিকল্প 2
আমি একটি সর্বজনীন ক্ষেত্র (বা একটি সুরক্ষিত ক্ষেত্র) ঘোষণা করতে পারি এবং এটি উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণিতে স্পষ্টভাবে ওভাররাইড করতে পারি। নীচের উদাহরণটি আমাকে "নতুন" ব্যবহার করার জন্য একটি সতর্কতা দেবে এবং আমি সম্ভবত এটি করতে পারি, তবে এটি ভুল অনুভব করে এবং এটি পলিমারফিজমটি ভেঙে দেয়, যা পুরো বিষয়টি ছিল। একটি ভাল ধারণা বলে মনে হচ্ছে না ...
abstract class Mother
{
public int MyInt = 0;
}
class Daughter : Mother
{
public int MyInt = 1;
}
বিকল্প 3
আমি একটি সুরক্ষিত ক্ষেত্র ব্যবহার করতে পারি এবং কনস্ট্রাক্টরের মধ্যে মান সেট করতে পারি। এটি বেশ পরিপাটি বলে মনে হচ্ছে তবে কনস্ট্রাক্টর সর্বদা এটি নির্ধারণ করে এবং একাধিক ওভারলোডেড কনস্ট্রাক্টরের সাথে কিছুটা কোডের মান নির্ধারণ করে না এমন সুযোগের বিষয়ে আমার উপর নির্ভর করে।
abstract class Aunt
{
protected int MyInt;
}
class Niece : Aunt
{
public Niece()
{
MyInt = 1;
}
}
এটি কিছুটা তাত্ত্বিক প্রশ্ন এবং আমি অনুমান করি যে উত্তরটি বিকল্প 1 হবে কারণ এটি একমাত্র নিরাপদ বিকল্প তবে আমি কেবল সি # এর সাথে আঁকড়ে ধরছি এবং আরও অভিজ্ঞতার সাথে এই ব্যক্তিদের জিজ্ঞাসা করতে চেয়েছিলাম।