विरासत कक्षाओं में स्थिरांक या अन्य क्षेत्रों को शुरू करने का सबसे अच्छा तरीका क्या है? मुझे एहसास है कि इस उदाहरण में कई वाक्यविन्यास त्रुटियां हैं, लेकिन यह स्पष्ट करने के लिए यह सबसे अच्छा उदाहरण है कि मैं क्या करने की कोशिश कर रहा हूं।विरासत कक्षाओं में फ़ील्ड शुरू करना
public abstract class Animal {
public abstract const string Name; // #1
public abstract const bool CanFly;
public abstract double Price; // price is not const, because it can be modified
public void Fly() {
if (!CanFly)
Debug.Writeln("{0}s can't fly.", Name);
else
Debug.Writeln("The {0} flew.", Name);
}
}
public class Dog : Animal {
public override const string Name = "Dog"; // #2
public override const bool CanFly = false;
public override double Price = 320.0;
}
public class Bird : Animal {
public override const string Name = "Bird";
public override const bool CanFly = true;
public override double Price = 43.0;
}
कुछ बातें मैं पूरा करने के लिए कोशिश कर रहा हूँ
:
- बेस कक्षाएं इन 3 क्षेत्रों सौंपनी होगी।
- आदर्श रूप में मैं चाहता हूं कि ये प्रारंभिक फ़ील्ड कक्षा के शीर्ष पर एक साथ रहें ताकि मैं देख सकूं कि प्रत्येक वर्ग को कौन सा स्थिरांक सौंपा गया है और जब भी आवश्यक हो उन्हें बदल दें।
- फ़ील्ड का नाम और कैनफ़ाई बदला नहीं जा सकता है।
मुझे पता है कि आप इन क्षेत्रों को एक कन्स्ट्रक्टर (यदि आप कॉन्स से छुटकारा पाएं) में प्रारंभ कर सकते हैं, लेकिन फिर उन्हें असाइन करने की गारंटी नहीं है। यदि आपके पास इन फ़ील्ड्स के गुण हैं और उन्हें ओवरराइड करते हैं, तो आपको अभी भी संपत्ति के बैकिंग फ़ील्ड को प्रारंभ करना होगा। आप इसे कैसे कार्यान्वित करेंगे?
कुछ वाक्यविन्यास त्रुटियों इसके बारे में शिकायत:
- संशोधक 'सार' खेतों पर मान्य नहीं है। इसके बजाय एक संपत्ति का उपयोग करने का प्रयास करें। (# 1)
- एक स्थिरांक क्षेत्र उपलब्ध कराई जाने वाली एक मूल्य की आवश्यकता है (# 1)
- संशोधक 'ओवरराइड' मान्य नहीं है इस आइटम के लिए है (# 2)
मुझे लगता है कि आप समझ रहे हैं कि स्थिरांक क्या हैं। Constants उन मानों के लिए हैं जो ब्रह्मांड के पूरे इतिहास में कभी नहीं बदलते; इसलिए, नाम "स्थिर" है। स्थिरांक के अच्छे उदाहरण: एक दर्जन में अंडों की संख्या, परमाणु संख्या की लीड। खराब: आपके आवेदन की संस्करण संख्या; समय के साथ यह परिवर्तन। भयानक: तेल की एक बैरल की कीमत; हर कुछ सेकंड में बदलता है। यदि कोई ऐसा क्षेत्र है जिसका मूल्य आपके आवेदन के जीवनकाल के दौरान बदल सकता है, तो यह निरंतर नहीं है। स्पष्टीकरण के लिए –
धन्यवाद। मुझे लगता है कि मैं थोड़ी उलझन में था क्योंकि कुत्ता। नाम और कुत्ता। कैनफली फ़ील्ड कभी नहीं बदला जाना चाहिए, इस प्रकार मुझे लगता है कि उन्हें स्थिरांक होना चाहिए। हालांकि, Animal.Name और Animal.CanFly फ़ील्ड विरासत कक्षाओं द्वारा बदला जाएगा, इसलिए उन्हें स्थिरांक नहीं होना चाहिए। मैं उन्हें विरासत में केवल कक्षाओं में स्थिरांक के रूप में परिभाषित करने की कोशिश कर रहा था, जो मुझे लगता है कि आप नहीं कर सकते हैं। – Senseful
निर्माण मूल्य पर एक बार सेट किए गए मान को मॉडल करने के लिए और इसके बाद कभी नहीं बदला गया, एक पठनीय क्षेत्र का उपयोग करें। रीडोनली फ़ील्ड्स उदाहरण फ़ील्ड हो सकते हैं, इस मामले में आप प्रत्येक इंस्टेंस या स्थिर के लिए एक अलग मूल्य प्राप्त कर सकते हैं, इस मामले में प्रत्येक इंस्टेंस एक ही मान साझा करता है। –