मेरे पास एक सार आधार वर्ग है और मैं एक फ़ील्ड या संपत्ति घोषित करना चाहता हूं जिसके पास इस कक्षा वर्ग से प्राप्त प्रत्येक वर्ग में एक अलग मूल्य होगा।उप-वर्गों में फ़ील्ड या गुणों को ओवरराइड करना
मैं तो मैं एक आधार वर्ग विधि में यह संदर्भित कर सकते हैं baseclass में यह निर्धारित करना चाहते हैं - उदाहरण के ToString अधिभावी कहने के लिए "यह ऑब्जेक्ट प्रकार संपत्ति/क्षेत्र की है" के लिए। मेरे पास तीन तरीके हैं जिन्हें मैं ऐसा करने के बारे में देख सकता हूं, लेकिन मैं सोच रहा था - ऐसा करने का सबसे अच्छा या स्वीकार्य तरीका क्या है? न्यूबी सवाल, क्षमा करें।
विकल्प 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 होने के लिए के रूप में यह केवल सुरक्षित विकल्प है लगता है, लेकिन मैं तो बस के साथ सी # पकड़ के लिए हो रही है और साथ लोगों के इस पूछना चाहते अधिक अनुभव।
एक तरफ, मुझे सच में लगता है कि ** पिता ** फॉर्मूला "वाई", और मां, तार्किक रूप से, "एक्स" लागू करना चाहिए। –