जो भी आप पूरा करने की कोशिश कर रहे हैं, और आपके द्वारा पोस्ट किए गए नमूना कोड के साथ, VB.NET आपको ऐसा करने नहीं देगा।
आमतौर पर, आप तो जैसे VB.NET में एक संपत्ति की घोषणा कर सकते हैं:
Public Class qwqwqw
Public Property xyz() As String
Get
Return ""
End Get
Private Set(ByVal value As String)
'
End Set
End Property
End Class
मूल रूप से सार्वजनिक रूप समग्र संपत्ति अंकन, लेकिन सेटर (या गेटर) के लिए एक अधिक प्रतिबंधात्मक गुंजाइश दे रही है।
आपके मामले में मुख्य समस्या MustInherit (i.e. abstract) बेस क्लास है। चूंकि आप जिस संपत्ति को परिभाषित कर रहे हैं उसे मोस्टोवरराइड के रूप में चिह्नित किया गया है, इसलिए आप एक डिफ़ॉल्ट कार्यान्वयन (यानी यह भी, अमूर्त है) प्रदान नहीं कर सकते हैं, और इसमें "प्राप्त करें" और "सेट" रूपरेखा शामिल हैं, इसलिए, जो भी "समग्र" "इस अमूर्त संपत्ति घोषणा को आप जो दायरा देते हैं, वीबीएनईटी आपको दोनों व्युत्पन्न कक्षाओं के भीतर गेटर्स और सेटर्स के लिए इस दायरे का उपयोग करने के लिए मजबूर करेगा।
आधार वर्ग की संपत्ति पर केवल पढ़ने योग्य योग्य होने के बाद सभी व्युत्पन्न कक्षाओं और इस संपत्ति के कार्यान्वयन को केवल पढ़ने के लिए मजबूर किया जाएगा। रीडऑनली क्वालिफ़ायर को छोड़ना अभी भी काम नहीं करेगा, क्योंकि आप जो भी क्षेत्र को अमूर्त संपत्ति को देते हैं, वह दायरा होगा जो आपको निर्धारित किए गए कार्यान्वयन के भीतर दोनों सेटर्स और गेटर्स पर लागू होना चाहिए।
उदाहरण के लिए:
Public MustInherit Class Parent
Public MustOverride Property Foo() As String
End Class
Public Class ReadOnlyChild
Inherits Parent
Public Overrides Property Foo() As String
Get
'
End Get
Private Set(ByVal value As String)
'
End Set
End Property
End Class
(सेटर पर निजी scoping नोट)। यह काम नहीं करेगा क्योंकि वीबीएनईटी जोर दे रहा है कि चूंकि आप बेस क्लास प्रॉपर्टी को ओवरराइड कर रहे हैं, इसलिए आपकी पूरी संपत्ति में वही संपत्ति होनी चाहिए, जिसकी संपत्ति आप ओवरराइड कर रहे हैं (इस मामले में, सार्वजनिक)।
बेस क्लास की अमूर्त संपत्ति को सुरक्षित रखने का प्रयास करने से भी काम नहीं करेगा, क्योंकि तब आपको स्कोपिंग के समान स्तर पर संपत्ति को लागू करने की आवश्यकता होगी क्योंकि यह आपके बेस क्लास (यानी संरक्षित) में घोषित किया गया है। आमतौर पर, जब किसी विशिष्ट स्कोपिंग स्तर के साथ बेस क्लास की अमूर्त परिभाषा को ओवरराइड नहीं किया जाता है, तो आप गेटटर या सेटर अधिक प्रतिबंधित स्कोपिंग स्तर दे सकते हैं, लेकिन आप इसे कम प्रतिबंधित स्कोपिंग स्तर नहीं दे सकते।
इसलिए
:
Public MustInherit Class Parent
Protected MustOverride Property Foo() As String
End Class
Public Class ReadOnlyChild
Inherits Parent
Protected Overrides Property Foo() As String
Public Get
'
End Get
Set(ByVal value As String)
'
End Set
End Property
End Class
(गेटर पर सार्वजनिक scoping नोट)। सार्वजनिक क्षेत्र के संरक्षित होने के कुल संपत्ति दायरे से कम प्रतिबंधित होने के कारण या तो आधार वर्ग की अमूर्त संपत्ति घोषणा पर परिभाषित समान स्कोपिंग स्तर की वजह से काम नहीं करता है।
तो अपनी कक्षाओं के डिजाइन के रूप में आप अपने प्रश्न में उल्लेख है, मैं व्यक्तिगत रूप से, एक "जावा शैली" गेटर और सेटर तरीकों के रूप में वे तो अपने स्वयं के scoping के स्तर के साथ अलग से घोषित किया जा सकता के साथ जाना होगा।
मुझे नहीं लगता कि आप ऐसा कर सकते है कि VB.NET में क्या आवश्यकता होगी, के लिए अपने तर्क है (किसी के बारे में मुझे गलत साबित करने के लिए है): दुर्भाग्य से, एक ही रास्ता करने के लिए वास्तव में गुंजाइश चीजें ठीक से नेस्टेड वर्गों का उपयोग करने के लिए है ऐसा करने के लिए, यदि यह आपके स्वयं के वर्गों में से एक है तो निश्चित रूप से यह डिज़ाइन में त्रुटि इंगित करता है ... या हो सकता है कि इंटरफेस बीटर का इस्तेमाल किया गया हो? – spacemonkeys
मेरे मामले में, संपत्ति अधिकांश उपप्रकारों के लिए प्रभावी रूप से सच है, लेकिन वहां एक कहा गया है जहां संपत्ति संपादन योग्य है। अभी मैं टाइप चेक का उपयोग कर रहा हूं, लेकिन एक अतिव्यापी संपत्ति अधिक उपयुक्त होगी। –