मैं समझता हूं कि कैसे "नया" कीवर्ड व्युत्पन्न वर्ग में विधियों को छुपा सकता है। हालांकि, कक्षाओं के लिए इसका क्या प्रभाव है जो कीवर्ड का उपयोग करने वाले इंटरफेस को कार्यान्वित करते हैं?क्या आप इंटरफ़ेस पर गुणों का विस्तार करने के लिए C# नए कीवर्ड का उपयोग कर सकते हैं?
इस उदाहरण पर विचार करें, जहां मैं अपनी संपत्तियों को पढ़ने/लिखने के द्वारा एक इंटरफ़ेस का विस्तार करने का निर्णय लेता हूं।
public interface IReadOnly {
string Id {
get;
}
}
public interface ICanReadAndWrite : IReadOnly {
new string Id {
get;
set;
}
}
तो फिर तुम इस तरह काम करने के लिए सक्षम हैं:
public IReadOnly SomeMethod() {
// return an instance of ICanReadAndWrite
}
यह बुरा डिजाइन है? क्या यह मेरी कक्षाओं के लिए मुद्दों का कारण बनता है जो ICanReadAndWrite को लागू करते हैं?
संपादित करें:
मैं एक कारखाने वर्ग है कि एक IShoppingCartItemReadWrite देता है कहते हैं: यहाँ की एक काल्पनिक उदाहरण क्यों मैं इस तरह कुछ करने के लिए चाहते हो सकता है है। इसके बाद मैं एक सेवा परत कर सकता हूं जो उस पर कीमतों में बदलाव करता है, सामान बदलता है, आदि। फिर, मैं इन वस्तुओं को IShoppingCartItemRead के रूप में पास कर सकता हूं केवल कुछ प्रकार की प्रस्तुति परत जो उन्हें नहीं बदलेगा। (हाँ, मुझे पता है कि यह तकनीकी रूप से बदल सकता है - यह एक डिज़ाइन प्रश्न है, सुरक्षा नहीं, आदि)
आपका विशिष्ट उदाहरण अधिक समझ में नहीं आता है। यदि आप पढ़ और लिख सकते हैं, तो यह पढ़ा नहीं जाता है। –
एक IShoppingCartItemReadWrite बदला जा सकता है, लेकिन अगर मेरे पास ISHoppingCartItemReadOnly का संदर्भ है, तो यह केवल तब तक पढ़ा जाता है जब तक कि आप इसे किसी अन्य चीज़ पर नहीं डाल देते। – user10789
ध्यान दें कि आपको वास्तव में "नए" कीवर्ड की आवश्यकता नहीं है। –