2008-10-08 13 views
8

मैं 2 फाइलों के बीच कुछ कार्यक्षमता को विभाजित करने के लिए आंशिक कक्षाओं का उपयोग कर रहा हूं, लेकिन मुझे एक त्रुटि मिल रही है। मैं क्या गलत कर रहा हूं?सी # आंशिक कक्षाओं के साथ त्रुटि

A1.cs:

private partial class A 
{ 
    private string SomeProperty { get { return "SomeGeneratedString"; } }  
} 

A2.cs:

private partial class A 
{ 
    void SomeFunction() 
    { 
     //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0 
     //error CS0117: 'A' does not contain a definition for 'SomeProperty' 
    } 
} 

उत्तर

20

एक ही नाम स्थान में दो आंशिक वर्गों हैं? यह एक स्पष्टीकरण हो सकता है।

+0

ऊपर आप जाओ! धन्यवाद –

5

अलग नामस्थान?

1

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

+0

एमएसडीएन दस्तावेज के अनुसार, निजी आंशिक कक्षाओं के लिए ठीक है, जब तक कि दोनों निजी हैं। (कारण मुझे यह पता है कि मैंने वही बात सोचा, क्योंकि मैंने कभी सार्वजनिक आंशिक कक्षाएं देखी हैं .. इसलिए मैंने इसे देखा)। http://msdn.microsoft.com/en-us/library/wa80x488.aspx –

+0

अजीब। मैंने इसे पोस्ट करने से पहले विजुअल स्टूडियो में थोड़ा कंसोल एप्लिकेशन खटखटाया और ओपी के सटीक कोड में चिपकाया, और यह संकलित नहीं होगा। संशोधक को "आंतरिक" में बदलें और यह ठीक से संकलित करता है। –

+0

पहली बार एमएसडीएन गलत नहीं था ...;) लेकिन शायद यह एक स्पष्टीकरण का बहुत आसान है। निश्चित उत्तर खोजने के लिए निश्चित रूप से खुदाई करने लायक है। –

1

त्रुटि मैं मिलता है:

तत्वों एक नाम स्थान में परिभाषित स्पष्ट रूप से, निजी के रूप में घोषित नहीं किया जा सकता सुरक्षित, या आंतरिक

मैं इसे एक नाम स्थान मुद्दा है के रूप में पहले कहा अनुमान लगा रहा हूँ की रक्षा की।

+0

हाँ, यह भी त्रुटि है जो मैं देखता हूं। –

+0

ठीक है, निजी/संरक्षित कक्षाएं केवल तभी काम करती हैं जब वे घोंसला वाले वर्ग हों। "नामस्थान में परिभाषित तत्व ..." त्रुटि उस वजह से है। यह ओपी के संभवतः संपत्ति तक पहुंचने की व्याख्या नहीं करता है। ऐसा लगता है कि अगर वह अब तक पहुंच गया है, तो ये घोंसला वाले वर्ग हैं। –

4

सबसे पहले, मैं आपकी त्रुटि को पुन: उत्पन्न करने में असमर्थ था।

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

अगर मैं उन्हें निजी रखता हूं और उन्हें किसी अन्य वर्ग में घोंसला देता हूं, तो सब कुछ ठीक काम करता है।

मैं केवल आपकी त्रुटि को पुन: उत्पन्न कर सकता हूं, जब एक फ़ाइल में, मेरे पास दूसरी कक्षा के अंदर घोंसला वाले वर्ग का हिस्सा होता है, और दूसरी फ़ाइल में, मैं कक्षा को घोंसला नहीं देता, और फिर निजी कीवर्ड को हटा देता हूं ... इस तरह :

Class1.cs:

namespace stackoverflow.answers 
{ 
    public class Foo 
    { 
     private partial class Bar 
     { 
      private string SomeProperty { get { return "SomeGeneratedString"; } } 
     } 
    } 
} 

Class2.cs:

namespace stackoverflow.answers 
{ 
    partial class Bar 
    { 
     void SomeFunction() 
     { 
      string bar = this.SomeProperty; 
     } 
    }  
} 

अगर नामस्थान अलग मैं भी त्रुटि आप वर्णित मिलता है।

कृपया समाधान के लिए संपूर्ण कोड पोस्ट करें, क्योंकि प्रदत्त कोड अमान्य सी # वाक्यविन्यास है, और इसे बिना किसी संदर्भ के देखा जा सकता है।

0

मैं आपके कोड का विश्लेषण करता हूं। आपने आंशिक वर्ग को नेस्टेड क्लास के रूप में घोषित किया है, यह त्रुटि दिखाने का कारण है। क्यों bcz आंशिक वर्ग नेस्टेड क्लास के रूप में घोषित नहीं किया जाएगा, पैराअलल कीवर्ड को कई फाइलों में विभाजित किया जाता है, इसलिए, जब आप नेस्टेड क्लास में घोषित किया जाता है तो प्रत्येक फ़ाइल nae समान होती है।

1

संपादित करें:

समाधान: निर्माण कार्रवाई -> complile, और कुछ नहीं

मैं अधिक विशिष्ट करने की कोशिश करेंगे:

मैं एक वर्ग 3 में 3 आंशिक वर्गों के बीच साझा किया था विभिन्न फाइलेंएक पल में एक फ़ंक्शन कॉल (एक भाग से, दूसरे भाग में घोषित फ़ंक्शन के) ने त्रुटि दिखायी "वर्तमान संदर्भ में मौजूद नहीं है"। मुझे कुछ देर तक ले गया जब तक कि helped मुझे यह पता लगाने के लिए कि गलती से मैंने फ़ाइल के निर्माण की कार्रवाई को "संकलित" के बजाय "एम्बेडेड रेसर्स" में सेट किया था।

बिल्ड एक्शन स्विच करने के लिए आपको समाधान एक्सप्लोरर में फ़ाइल पर राइट क्लिक करना चाहिए, फिर गुण चुनें। फिर बिल्ड एक्शन बदलें।

यह प्रश्न पुराना है, और मेरा जवाब इस मामले में बिल्कुल सहायक नहीं है। लेकिन यह आंशिक कक्षाओं से संबंधित एक अन्य दुर्लभ मामले में सहायक हो सकता है। क्षमा करें अगर मेरी अंग्रेजी स्पष्ट नहीं है।

+1

यह एक अच्छा जवाब हो सकता है यदि आपने हमें बताया कि आपके स्थानीय एसओ पर वास्तव में क्या कहा गया था, प्रासंगिक प्रश्न से जुड़ा हुआ है और इसका अनुवाद किया गया है (मान लीजिए कि यह अंग्रेजी में नहीं है)। –

+0

@ दोहाकत 7 ने और स्पष्ट होने की कोशिश की –

1

@Andrey कश्मीर के रूप में, लेकिन सरल शब्दों

में एक ही जवाब सेट अपने सभी आंशिक वर्गों के निर्माण कार्रवाई 'संकलित' उन फ़ाइलों में से प्रत्येक के 'गुण' विंडोज़ का उपयोग करने के लिए

Properties window -> Build action property

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