संपादित करें:यह पता चला कि मुझे कुछ स्पष्ट याद आया, लेकिन अगर कोई और एक ही स्पष्ट गलती करता है तो मैं प्रश्न खोलने जा रहा हूं। उन लोगों के लिए धन्यवाद जिन्होंने इसेस्पष्टीकरण के लिए नीचे देखें।किसी इंटरफ़ेस में गुण जोड़ने से व्युत्पन्न प्रकारों में निजी/संरक्षित "सेट" बनाने से रोकें?
क्या एक ऐसी संपत्ति पर गैर-सार्वजनिक सेट होना संभव है जो एक इंटरफ़ेस संपत्ति को ओवरराइड कर रहा हो?
शायद मुझे एक बेवकूफ पल हो रहा है, लेकिन ऐसा लगता है कि एक इंटरफ़ेस में परिभाषित संपत्ति होने के कारण यह आवश्यक है कि कोई व्युत्पन्न वर्ग उस संपत्ति के लिए कोई गैर-सार्वजनिक सेट प्रदान न कर सके।
उदाहरण:
interface IField
{
bool IsValid { get; }
}
... और जब से इंटरफ़ेस गुण पहुँच संशोधक नहीं हो सकता है इसका मतलब है कि:
class Field : IField
{
public override bool IsValid { get; protected set; }
}
... तथ्य यह है कि यह इंटरफ़ेस को पूरा करती है के बावजूद संभव नहीं होगा आवश्यकताओं अवधारणात्मक।
आईएमओ के पास गैर-सार्वजनिक गुणों के माध्यम से किए जा सकने वाले encapsulation के लिए बड़े नकारात्मक प्रभाव पड़ते हैं, और संपत्तियों के लिए कई सामान्य उपयोग पैटर को रोकता है।
मुझे पता है कि आप एक गैर-सार्वजनिक SetIsValid सदस्य बना सकते हैं जो एक सामान्य बैकिंग स्टोर को संशोधित करता है, लेकिन इससे एक असंगत पैटर्न बन जाएगा और अन्यथा कोड शोर क्या होगा, यह आवश्यक नहीं है।
क्या मुझे कुछ याद आया है?
संपादित करें: हाँ, मैं कुछ
याद किया मैं इस समय किसी और के कोड को संशोधित कर रहा हूँ और सिर्फ एहसास है कि वर्ग मैं इंटरफ़ेस कार्यान्वित किया है और एक से प्राप्त के साथ कुश्ती गया था आधार वर्ग और मैं C# के लिए नया हूं, यही वजह है कि ओवरराइड भ्रम पैदा हुआ।
वास्तविक वर्ग की तरह देखा:
class Field : IField, BaseField
{
public override bool IsValid { get; protected set; }
}
... जहां BaseField रूप में अच्छी तरह इंटरफ़ेस कार्यान्वित, लेकिन सेट को लागू नहीं किया।
क्या आपने पहले अपना उदाहरण संकलित करने का प्रयास किया था? आपका उदाहरण इंटरफ़ेस गलत है क्योंकि आपके पास सार्वजनिक संशोधक है, जो अवैध है। साथ ही, आपकी कक्षा परिभाषा गलत है क्योंकि आपके पास इंटरफ़ेस परिभाषा पर ओवरराइड कीवर्ड है, जो अवैध है।एक बार जब आप उन दो चीजों के लिए सही हो जाते हैं, तो यह ठीक से संकलित होता है और जैसा कि आप उम्मीद करते हैं, काम करेंगे। – Nick
इंटरफ़ेस में सार्वजनिक एक टाइपो था। – Catskul
हां, आप उन क्षणों में से एक हैं। –