क्या सी # बेस क्लास केवल पुस्तकालय असेंबली के भीतर सुलभ हो सकता है, जिसमें इसे संकलित किया गया है, जबकि अन्य सबक्लास जो इसे प्राप्त करते हैं?सी # निजी (छुपा) बेस क्लास
उदाहरण के लिए:
using System.IO;
class BaseOutput: Stream // Hidden base class
{
protected BaseOutput(Stream o)
{ ... }
...lots of common methods...
}
public class MyOutput: BaseOutput // Public subclass
{
public BaseOutput(Stream o):
base(o)
{ ... }
public override int Write(int b)
{ ... }
}
यहाँ मैं पसंद BaseOutput
वर्ग मेरे पुस्तकालय के ग्राहकों के लिए दुर्गम होने के लिए, लेकिन उपवर्ग MyOutput
पूरी तरह से सार्वजनिक होने की अनुमति होगी। मुझे पता है कि सी # बेस क्लास को उप-वर्गों की तुलना में अधिक प्रतिबंधक पहुंच की अनुमति नहीं देता है, लेकिन क्या एक ही प्रभाव प्राप्त करने का कोई अन्य कानूनी तरीका है?
अद्यतन
इस विशेष पुस्तकालय के लिए मेरे समाधान आधार वर्ग public
और abstract
बनाने के लिए, और के साथ दस्तावेज़ के लिए "इस आधार सीधे वर्ग का प्रयोग न करें" है। मैं बेस क्लास internal
का कन्स्ट्रक्टर भी बना देता हूं, जो बाहरी क्लाइंट को वर्ग का उपयोग करने या विरासत में प्रभावी ढंग से रोकता है।
(क्योंकि अन्य हे-ओ भाषाओं मुझे आधार वर्ग को छुपाया है चलो यह शर्म की बात है।)
आप 'बेसऑटपुट' आंतरिक का निर्माता क्यों नहीं बनाते हैं, इसलिए कोई बाहरी कोड इससे प्राप्त नहीं हो सकता है? –
@ माइकज़: हाँ, मैंने यही किया है, ऊपर दिए गए अपडेट को देखें। –
आंतरिक कन्स्ट्रक्टर के साथ सार्वजनिक वर्ग शायद एक बेहतर विकल्प (मेरे उत्तर में नमूना) –