2012-01-18 6 views
23

को देखते हुए निम्नलिखित कोड:Resharper क्यों सोचता है कि संपत्ति के साथ एक आंतरिक वर्ग "SomeValue" बाहरी वर्ग में एक ही नाम के साथ एक संपत्ति छुपाता है?

public static class Super 
{ 
    public static class Inner 
    { 
     public static string SomeValue { get; set; } 
    } 

    public static string SomeValue { get; set; } 
} 

Resharper मुझसे कहता है कि Super.Inner.SomeValue बाहरी कक्षा से एक संपत्ति छुपाता है।

छिपाने के तरीके कैसे चल रहे हैं? आपके पास दो अलग-अलग संदर्भ हैं (Super.SomeValue और Super.Inner.SomeValue)। और (जहां तक ​​मुझे पता है) आप अन्य चर के अर्थ के संदर्भ में एक संदर्भ का उपयोग नहीं कर सकते हैं।

मुझे पता चला है कि कभी-कभी रिशेर्पर गलत होता है। लेकिन आमतौर पर नहीं। तो मैं जानना चाहता हूं कि यह क्या सोच रहा है।

कोई विचार?

+2

वापस जाने के लिए मैं यह नहीं बल्कि उपवर्ग से एक नेस्टेड वर्ग है, जो अधिक है कहा जाता है लगता है कारण होगा:

इस पर विचार करें व्युत्पन्न वर्ग के लिए प्रासंगिक ;-) – Seb

+0

@ सेब - अच्छा बिंदु। मैंने शीर्षक बदल दिया। – Vaccano

उत्तर

27

मैं अनुमान लगा रहा हूं क्योंकि इसका मतलब आंतरिक कक्षा में SomeValue का उपयोग करना है, इसका मतलब है कि आपको बाहरी वर्ग की बजाय आंतरिक कक्षा में आवंटित मान मिलता है।

public static class Super 
{ 
    public static class Sub 
    { 
    public static string OtherValue {get{return SomeValue;}} 

    // Remove this line and OtherValue will return Outer 
    public static string SomeValue { get{return "Inner"; }} 
    } 

    public static string SomeValue { get{return "Outer"; }} 
} 

वर्तमान में Super.Sub.OtherValueInner वापस आ जाएगी लेकिन लाइन मैं टिप्पणी की है को हटाने यह Outer

+0

नीचे वोट क्यों? – Joey

+0

यह आपको इसे एक्सेस करने से नहीं रोकता है, लेकिन आपको संदर्भ को अर्हता प्राप्त करनी है; var someValue = Super.SomeValue; –

+0

हाँ, शब्दों की बुरी पसंद, इसे बदल देगा। – Joey

2

ऐसा लगता है कि वे इसे तय कर दी है, लेकिन तय निर्माण जारी करने के लिए अभी तक: http://youtrack.jetbrains.net/issue/RSRP-277343#tab=History

संपादित

रूप nulltoken ने बताया, ऊपर के लिंक एक अलग परिदृश्य में जहाँ हम एक enum नहीं एक है स्ट्रिंग और सदस्य स्थैतिक नहीं हैं, इसलिए यह लागू नहीं हो सकता है।

इसके अलावा, यह आंतरिक से बाहरी को छुपाता है क्योंकि अब आपको Inner.SomeValue संदर्भ को अर्हता प्राप्त करने की आवश्यकता है क्योंकि SomeValue आपको डिफ़ॉल्ट रूप से आंतरिक प्रदान करेगा, इस प्रकार IMHO यह इतनी बुरी चेतावनी नहीं है।

+0

मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि आप जिस मुद्दे को इंगित करते हैं वह थोड़ा अलग विषय के साथ सौदा करता है: अभिभावक वर्ग में एक एनम घोषित किया जाता है, फिर नेस्टेड क्लास में उपयोग किया जाता है। – nulltoken

+0

@nulltoken, आप सही हैं, यह एक enum एक स्ट्रिंग नहीं है और सदस्य स्थिर नहीं हैं, इसलिए यह जरूरी नहीं है। –

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