मैं यह वही सवाल पूछना चाहता था, लेकिन शुक्र है कि यह मेरे लिए यह पाया।
मैं इस बात को समझ सकता हूं कि कम से कम एक नया कीवर्ड या मौजूदा कीवर्ड के लिए नए अर्थशास्त्र की आवश्यकता होगी, इसलिए यह समर्थित नहीं था क्योंकि लागत-लाभ इसके पक्ष में काम नहीं करता था।
हालांकि, मैं सवाल करता हूं कि संकीर्ण उपयोग-मामले के कारण इस सीएलआर सुविधा को लागू करने से बचने के लिए वैध है या क्योंकि यह लोगों को भ्रमित कर सकता है।
ऊपर दिया गया एक तर्क यह है कि इसका उपयोग केवल आत्म-अनुशासन को लागू करना होगा।
लेकिन फिर भी किसी भी दृश्यता संशोधक के बारे में कहा जा सकता है जो public
नहीं है। विचार यह भी है कि यह केवल 'एक पुस्तकालय के एक एकल डेवलपर' पर लागू होगा, यह भी स्पष्ट रूप से गलत है। कई पुस्तकालय लोगों की टीमों द्वारा विकसित किए जाते हैं, और यह उस टीम के भीतर एक डेवलपर के लिए पूरी तरह से प्राकृतिक है जो सदस्य को जोड़ने के लिए है कि वह केवल अपने आधार से प्राप्त आंतरिक प्रकारों तक सीमित होना चाहता है।
तो फिर वहाँ इस परिदृश्य है:
internal class Foo {
}
public class PublicBase {
protected Foo MyFoo { get; set; }
}
मामले यहाँ में, मैं एक आंतरिक प्रकार है कि मैं एक वर्ग पर बेनकाब करने के लिए करना चाहते हैं, लेकिन मैं केवल व्युत्पन्न प्रकार के लिए इसे उजागर करना चाहते हैं। चूंकि प्रकार आंतरिक है, इसलिए इसका अर्थ है कि एक ही असेंबली में व्युत्पन्न प्रकार। बाहरी प्रकार अभी भी वैध रूप से इस प्रकार से प्राप्त कर सकते हैं, लेकिन उन्हें इस सदस्य का उपयोग करने की आवश्यकता नहीं होगी।
इस स्थिति में मैं अटक गया हूं: मैं protected
का उपयोग नहीं कर सकता, और न ही मैं protected internal
का उपयोग कर सकता हूं।
इसके बजाय, मुझे internal
का उपयोग करना होगा, जो मेरी टीम के अन्य सदस्यों को गलत तरीके से प्रसारित करता है कि इसे कक्षा के बाहर कोड से उपयोग किया जाना चाहिए। निश्चित रूप से मैं इस पर एक टिप्पणी कर सकता हूं (और EditorBrowsableAttribute
Never
पर भी चिपका सकता हूं, लेकिन यह आंतरिक विरासतकर्ताओं से भी छिपाएगा) - लेकिन यह वही नहीं है।
जैसा कि है, मैं इसे प्राप्त करने का एकमात्र तरीका निर्माण के बाद आईएल पुनर्लेखन के साथ असेंबली को हैक करना चाहता हूं - लेकिन मुझे संकलन के समय इस दृश्यता (या इसकी कमी) की आवश्यकता है, इसके निर्माण के बाद नहीं।
अंत में, के बारे में तर्क "क्या खोजशब्द (ओं) यह प्रयोग करेंगे" या "यह कैसे लागू किया जाएगा" मेरे लिए अप्रासंगिक हैं: मैं प्रोग्रामर, नहीं सी # भाषा डिजाइनर हूँ।
समान रूप से, मुझे जैसे तर्क कहना है "ठीक है, protected internal
कई लोगों के लिए पर्याप्त भ्रमित है" भी अप्रासंगिक हैं। ऐसे कई डेवलपर्स हैं जिनके साथ मैं संपर्क में आया हूं, या तो व्यक्तिगत रूप से या वर्चुअल रूप से, जो ?:
या सामान्य बाधाओं जैसी चीज़ों को नहीं समझते हैं - अनुमान लगाएं, वे उनका उपयोग नहीं करते हैं! इसका मतलब यह नहीं है कि मुझे नहीं करना चाहिए।
तो हाँ, मैं इसे लागू करने के कारणों को समझता हूं - लेकिन मैं उनसे असहमत हूं - इसलिए मेरा जवाब यह है कि सी # इसका समर्थन क्यों नहीं करता क्योंकि सी # डिजाइनरों को यह गलत लगता है।
और हाँ मैं गर्मी है कि मेरे दरवाजे पर लाने सकता है :)
इसके बाद से यह मौजूदा लोगों के साथ व्यक्त नहीं किया जा सकता किसी दूसरे कीवर्ड की आवश्यकता है के लिए तैयार हूँ। किसी भी भाषा सुविधा में 1000 अंक खर्च होते हैं, एक कीवर्ड की लागत दस लाख अंक होती है। बहुत खड़ी। वीबी.नेट बीटीडब्ल्यू में वही। –
@minitech 'संरक्षित मित्र' सी # की 'संरक्षित आंतरिक' के समान है। यह आपको सीएलआर में मौजूद संरक्षित और आंतरिक पहुंच निर्दिष्ट करने की अनुमति नहीं देता है। –
महान प्रश्न :) – BlackBear