कक्षा के सदस्यों को केवल एक अन्य वर्ग तक सीमित कैसे करें

मैं क्लास सदस्यों को एक्सेस करना चाहता हूं जो कक्षा 1 में किसी अन्य वर्ग ( कक्षा 2 ) से हैं, लेकिन मैं इसे केवल उस वर्ग से एक्सेस करना चाहता हूं और किसी भी अन्य वर्ग, फ़ॉर्म के रूप में पहुंच को प्रतिबंधित करना चाहता हूं , आदि क्या ऐसा करने का कोई तरीका है?

3
मैंने आपके प्रश्न का शीर्षक थोड़ा बदल दिया, क्योंकि आपको लगता है कि आपको इससे परेशानी हो रही है। अगर मुझे यह गलत लगता है तो इसे फिर से बदलने के लिए स्वतंत्र महसूस करें, या इसे वापस बदलें।
जोड़ा लेखक Beska, स्रोत
तुम ऐसा क्यों करना चाहते हो?
जोड़ा लेखक Unmesh Kondolikar, स्रोत

6 उत्तर

ऐसा करने का एकमात्र तरीका वर्गों को घोंसला करना है, और फिर डेटा को निजी बनाना है:

public class Class1
{
    private object data;
    public class Class2
    {
        public void Foo(Class1 parent)
        {
            Console.WriteLine(parent.data);
        }
    }
}
3
जोड़ा

आप नेस्टेड क्लास का उपयोग निजी स्कोप के साथ कर सकते हैं:

public class Class2
{
    public Class2()
    {
        Class1 c1 = new Class1();
        Console.WriteLine(c1.Id);
    }                

    private class Class1
    {
        public int Id { get; set; }
    }
}
1
जोड़ा
सवाल यह इंगित करता है कि दोनों वर्गों को सार्वजनिक होना चाहिए, लेकिन कोई भी अन्य वर्ग या तो के उदाहरण डेटा तक नहीं पहुंच सकता है। यह पूरा नहीं करता है। यह किसी भी अन्य प्रकार से कक्षा 1 तक पहुंच को रोकता है।
जोड़ा लेखक Servy, स्रोत
मुझे लगता है कि वह कक्षा ( कक्षा 1 ) सदस्यों तक पहुंच को रोकना चाहता है। यह प्रश्न निर्दिष्ट नहीं करता है, अगर कक्षा 1 Class2 से अन्य वर्गों द्वारा उपयोग किया जा सकता है।
जोड़ा लेखक kmatyaszek, स्रोत

असल में, आप इसे थोड़ी सी पार्श्व सोच के साथ कर सकते हैं। एक तरीका क्लास 1 पर एक विधि बनाना है जो कक्षा 2 के उदाहरण को स्वीकार करता है और सदस्यों को एक्सेस करने के लिए प्रतिनिधियों को रिटर्न देता है जो निजी चिह्नित हैं। फिर कक्षा 2 को किसी को विरासत में घुसने से रोकने के लिए मुहरबंद घोषित करें।

एक और तरीका प्रत्येक सदस्य में स्टैकफ्रेम के साथ कॉल स्टैक का निरीक्षण करना होगा (फ़ील्ड इसके लिए बाहर हैं) और अगर कॉलर वांछित प्रकार नहीं है तो अपवाद फेंक दें।

भगवान जानता है। तुम हालांकि ऐसा क्यों करेंगे! :)

1
जोड़ा
जाहिर है, मुझे लगता है कि नेस्टेड क्लास विकल्प उपलब्ध नहीं है। :)
जोड़ा लेखक James World, स्रोत

आप एक संपत्ति लागू कर सकते हैं

[IsAllowed(true)]
public class a
{

}

फिर आपके, विधि पर आप उदाहरण की आवश्यकता वाले प्रत्येक विधि के संकेत को बदल सकते हैं।

public class b {
   public void method ( object aClassInstace){
     .... Here check the property
   }
}
0
जोड़ा

आप "दोस्त" के बराबर सी # चाहते हैं, लेकिन वास्तव में कोई नहीं है। यह पिछला प्रश्न संभावित समाधान देता है।

0
जोड़ा
सी # में दोस्त के बराबर आंतरिक है यदि आप मानते हैं कि एक असेंबली पैकेज के बराबर है।
जोड़ा लेखक Kenneth, स्रोत
मैंने सोचा था कि आप जावा के बारे में बात कर रहे थे। मुझे सी ++ के बारे में पता नहीं है
जोड़ा लेखक Kenneth, स्रोत
मित्र आमतौर पर कक्षाओं पर काम करता है, संकुल नहीं (उदा। सी ++)। जैसा कि आप सुझाव देते हैं, यह आंतरिक जैसा नहीं है।
जोड़ा लेखक AndySavage, स्रोत

आप एक इंटरफेस बना सकते हैं, जो आपके निजी सदस्यों तक पहुंच के लिए गुणों का पर्दाफाश कर सकता है। और इसे स्पष्ट रूप से लागू करें। अन्य वर्ग में उस इंटरफ़ेस का उपयोग करने से भी अधिक। 2-वें तरीका प्रतिबिंब का उपयोग करना है। 3-rd नेस्टेड कक्षाएं हैं।

0
जोड़ा