2009-10-27 7 views
12

यह कोड कैसे संकलित कर सकता है? ऑपरेटर int में नीचे दिया गया कोड क्लास MyValue के एक निजी चर का उपयोग कर सकते हैं? क्यूं कर?एक स्टेटिक विधि के भीतर पैरामीटर के निजी सदस्य तक पहुंचना?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Myvalue my = new Myvalue(100); 
     Console.WriteLine(my + 100); 
     Console.Read(); 
    } 
} 


public class Myvalue 
{ 
    private int _myvalue; 

    public Myvalue(int value) 
    { 
     _myvalue = value; 
    } 

    public static implicit operator int(Myvalue v) 
    { 
     return v._myvalue; 
    } 
} 

उत्तर

18

क्योंकि यह कक्षा में है, इसमें निजी चरों तक पहुंच है। बस आपके उदाहरण सार्वजनिक तरीकों की तरह। यह विपरीत तरीके से भी काम करता है। आप मोनोस्टेट पैटर्न बनाने के लिए इंस्टेंस सदस्यों से निजी स्थिर सदस्यों तक पहुंच सकते हैं।

+0

यदि वर्ग स्थिर होता तो मैं समझता। लेकिन चूंकि ऑब्जेक्ट पैरामीटर द्वारा पारित किया जाता है, इसलिए इसे एक्सेसर की आवश्यकता क्यों नहीं होती है? –

+3

@ डेक: क्योंकि आपकी स्थैतिक विधि कक्षा का सदस्य है। यदि वह स्थैतिक विधि कहीं और थी तो इसकी अनुमति नहीं दी जाएगी। –

+0

ठीक है परिशुद्धता के लिए धन्यवाद। –

5

ऑपरेटर int() अभी भी MyValue क्लास का सदस्य कार्य है और इसलिए MyValue प्रकार के ऑब्जेक्ट्स के सभी फ़ील्ड तक पहुंच सकता है।

ध्यान दें कि स्थिर का मतलब है कि एक MyValue ऑब्जेक्ट को पैरामीटर के रूप में फ़ंक्शन में पास करने की आवश्यकता है।

14

private का मतलब क्लास के लिए निजी है और उदाहरण के लिए निजी नहीं है।

+2

+1 - ठीक है, सटीक, और pithy कहा! – Nate

+1

+1 वास्तव में: http://stackoverflow.com/questions/888224/what-is-your-longest-held-programming-assumption-that-turned-out-to-be-incorrect/888246#888246 –

+1

हम, नहीं उदाहरण के लिए निजी? मुझे लगता है कि यह गलत है क्योंकि मैं इसका उपयोग नहीं कर सकता: Myvalue my = new Myvalue (100); my._Myvalue = 1; क्योंकि उदाहरण "मेरा" निजी चर का उपयोग नहीं कर सकता है। –

संबंधित मुद्दे