यह सबसे अच्छा तरीका है जिसे मैं सोच सकता हूं।
सी # 5 में, फोन करने वाले के बारे में जानकारी विशेषताओं का एक सेट जोड़ा गया था, अर्थात् [System.Runtime.CompilerServices.CallerMemberName]
, [System.Runtime.CompilerServices.CallerFilePath]
, और [System.Runtime.CompilerServices.CallerLineNumber]
। हम CallerFilePathAttribute
का उपयोग देखने के लिए फोन करने वाले एक विशेष .cs
फ़ाइल से आता है कि क्या कर सकते हैं।
आमतौर पर, एक फ़ाइल में केवल एक वर्ग या संरचना होगी। उदाहरण के लिए, ClassA
को ClassA.cs
में परिभाषित किया गया है। आप जांच सकते हैं कि कॉलर फ़ाइल का नाम विधि में ClassA.cs
से मेल खाता है या नहीं। विधि में, अगर callerFilePath
ClassA
की फ़ाइल पथ से मेल खाता है जाँच
([CallerFilePath] string callerFilePath = "" /*Other parameters*/)
:
तो अपने विधि के पैरामीटर इस तरह संशोधित करते हैं। यदि ऐसा नहीं होता है, तो एक अपवाद फेंक दें कि विधि को केवल ClassA
से एक्सेस किया जा सकता है!
यदि आप दोनों कक्षाओं को केवल उन दो वर्गों को समर्पित असेंबली में डालते हैं, तो आप 'आंतरिक' का उपयोग कर सकते हैं। लेकिन ... आप पुनर्विचार करना चाहेंगे कि आपको ऐसा करने की आवश्यकता क्यों है। –
इस तरह के डिजाइन के पीछे तर्कसंगत क्या है? – dotctor
संभावित डुप्लिकेट: http://stackoverflow.com/questions/203616/why-does-c-sharp-not-provide-the-c-style-friend-keyword –