2010-07-30 12 views
11

बस सोच रहा है कि निजी वर्ग-स्तरीय चर विरासत में मिला है या नहीं? सी #निजी वर्ग स्तर के चर विरासत में हैं?

+0

किस भाषा में? –

+1

सी # में खेद है कि –

+0

के संभावित डुप्लिकेट [क्या निजी सदस्यों को सी # में विरासत में मिला है?] (Http://stackoverflow.com/questions/2950820/are-private-members-inherited-in-c) –

उत्तर

14

हां, लेकिन वे पहुंच योग्य नहीं हैं, इसलिए इसे देखकर आप ईमानदारी से कह सकते हैं कि वे विरासत में नहीं हैं। लेकिन हाँ वे वास्तव में

4

यह भाषा पर निर्भर करता है, लेकिन सामान्य रूप से, नहीं - वे केवल उस वर्ग में पहुंच योग्य होते हैं जिसमें उन्हें परिभाषित किया जाता है।

+0

लेकिन वे आमतौर पर भाग होते हैं उदाहरण के (भले ही भाषा पहुंच को रोकती है)। –

11

वे विरासत में हैं, लेकिन कीवर्ड "निजी" का अर्थ है कि केवल वह वर्ग जिसमें उन्हें घोषित किया गया था, उन्हें एक्सेस कर सकते हैं। इसमें उप-वर्ग शामिल नहीं हैं। हालांकि, क्योंकि सबक्लास के एक उदाहरण में अपना सुपरक्लास होता है, वे अभी भी वहां हैं। आप बस उन्हें सीधे नहीं देख सकते हैं।

यदि कोई फ़ील्ड ढूंढ रहे हैं जो केवल घोषित वर्ग और उसके उप-वर्ग देख सकते हैं, तो आप "निजी" के बजाय कीवर्ड "संरक्षित" का उपयोग कर सकते हैं, और यह उस कार्यक्षमता को प्रदान करना चाहिए जिसे आप ढूंढ रहे हैं।

3

वे हैं, हालांकि वे सीधे पहुंच योग्य नहीं हैं।

public class BaseClass 
{ 
    private const int _aNumber = 5; 
    public int ReturnANumber() { return _aNumber; } 
} 

public class DClass : BaseClass 
{ 
    public void SomeMethod() 
    { 
     // This is indirectly accessing a private implemented in the class 
     // this derives from, but existing inside this class. 
     int numbery = this.ReturnANumber(); 
    } 
} 

public class Whatever 
{ 
    public void AMethod(DClass someDClass) 
    { 
     int thisIsNumberFive = someDClass.ReturnANumber(); 
    } 
} 
7

वे एक अर्थ में विरासत में हैं। उनके लिए मेमोरी स्पेस आवंटित किया गया है, और वे सबक्लास उदाहरण के भीतर "मौजूद" हैं। हालांकि, सबक्लास स्वयं चर का उपयोग नहीं कर सकता है। आधार वर्ग के भीतर तरीकों की जरूरत निजी चर सेट करने के लिए सक्षम होने के लिए (या किसी काम का नहीं वहाँ होगा - (आप आधार वर्ग चर का उपयोग करने के उपवर्ग चाहते हैं, protected बजाय private का उपयोग करें।)

यह आवश्यक है इसके लिए)। वे विधियां उप-वर्ग के उदाहरण पर भी उपलब्ध हैं - और वास्तव में, उप-वर्ग उदाहरण को बेस क्लास के उदाहरण के रूप में माना जाना चाहिए (Liskov substitution principle को संतुष्ट करने के लिए आवश्यक)। यदि निजी चर विरासत में नहीं थे, तो बेस क्लास विधियों का व्यवहार बदल जाएगा या टूट जाएगा।

3

हां, वे विरासत में हैं लेकिन संकलक उन्हें एक्सेस करने पर रोक लगाता है। आलस, आप अभी भी उन्हें प्राप्त कर सकते हैं - प्रतिबिंब के माध्यम से या अपने अच्छे AMethod() चाल के माध्यम से अनुशंसित नहीं है।

3

वे विरासत में हैं लेकिन पहुंच योग्य नहीं हैं या वे केवल उस कक्षा में पहुंच योग्य हैं जहां उन्हें घोषित किया जाता है। आप दो तरह से

  1. द्वारा उप वर्ग में उन तक पहुँच सकते घोषित उन्हें बल्कि तो संरक्षित निजी
  2. एक सार्वजनिक विधि है जो कि निजी चर

    का मान लिखना लेकिन वहाँ कोई रास्ता नहीं है कि आप सीधे उपclass में निजी चर का उपयोग करें।

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