mono - Should a protected property in a C# child class hide access to a public property on the parent? -


मेरे पास निम्न कोड है:

  सार्वजनिक वर्ग के जनक {सार्वजनिक स्ट्रिंग मायफ़िल्ड {get; सेट; }} पब्लिक क्लास बच्चे: माता-पिता {संरक्षित न्यू इंट मायफ़ील्ड {get; सेट; }}  

मैं इस के साथ कोशिश करता हूं:

  स्थिर शून्य मुख्य (स्ट्रिंग [] args) {बाल बच्चे = नया बच्चा (); Child.MyField = "कुछ"; }  

दृश्य स्टूडियो 2008 इस टिप्पणी के बिना संकलित करता है, लेकिन मोनो (2.4.2, उबंटू) के अंतर्गत मुझे त्रुटि संदेश मिलता है

  'HideTest.Child  

संपादित करें: मजबूत> उन सभी लोगों के लिए धन्यवाद जिन्होंने खराब डिज़ाइन को बताया है दुर्भाग्य से यह तीसरी पार्टी की लाइब्रेरी है और इसे बदलना व्यावहारिक नहीं है।

से (सी # स्पेक ) §10.7.1.2:

एक नए सदस्य की घोषणा केवल एक सदस्य के दायरे के भीतर एक विरासत में आने वाले सदस्य को छुपाता है।

आप यह देख सकते हैं माइक्रोसॉफ्ट के कार्यान्वयन पर इस परीक्षा को चलाने के द्वारा व्यवहार।

  सिस्टम का उपयोग कर; NUnit.Fraamework का उपयोग कर; नेमस्पेस स्क्रैचपैड {[टेस्टफाईएक्शंस] पब्लिक क्लास क्लास 1 {टेस्ट] सार्वजनिक शून्य इनहेरिटेंसहाइडिंग () {var b = नया बेस (); Var d = नया व्युत्पन्न (); Var baseSomeProperty = b.SomeProperty; Var derivedSomeProperty = d.SomeProperty; b.GetSomeProperty (); d.GetSomeProperty (); }} सार्वजनिक वर्ग बेस {सार्वजनिक स्ट्रिंग SomeProperty {get {Console.WriteLine ("Base.SomeProperty प्राप्त करना"); वापसी "Base.SomeProperty"; }} सार्वजनिक स्ट्रिंग GetSomeProperty () {SomeProperty वापस; }} सार्वजनिक वर्ग व्युत्पन्न: बेस {सुरक्षित न्यू इंक SomeProperty {get {Console.WriteLine ("Derived.SomeProperty प्राप्त करना"); वापसी 3; // पासा के यादृच्छिक रोल द्वारा निर्धारित }} सार्वजनिक न्यू इंक GetSomeProperty () {SomeProperty वापसी; आउटपुट:  
  बेस हो रही है। कुछ प्रॉपर्टी // (कोई विवाद नहीं) आधार प्राप्त करना। कुछ प्रॉपर्टी // (क्योंकि आप कॉल कर रहे हैं सार्वजनिक क्षेत्र से और नए सदस्य संरक्षित क्षेत्र में है, कोई छुपा नहीं है) बेस हो रही है। कुछ प्रॉपर्टी / (कोई विवाद नहीं) प्राप्त हो रही है। कुछ प्रॉपर्टी // (अब क्योंकि आप संरक्षित क्षेत्र से कॉल कर रहे हैं, आप सुरक्षित सदस्य प्राप्त करते हैं) ।  

इसलिए जो संपत्ति आप अपने मेन () से एक्सेस कर रहे हैं, वह मूल वर्ग संपत्ति होनी चाहिए (जैसा कि यह MS.NET में है), व्युत्पन्न संपत्ति नहीं (मोनो में), क्योंकि नए व्युत्पन्न सदस्य केवल 'पुराने' आधार सदस्य को संरक्षित क्षेत्र में छुपाता है।

मोनो कुछ गलत कर रहा है जो कि युक्ति के अनुसार है।


Comments