2010-08-03 19 views
5

मैंने हाल ही में सी # सीखना शुरू कर दिया है। मैंने अभी संपत्तियों के बारे में सीखा है और उन्हें और अधिक समझने के लिए एक सरल कार्यक्रम बनाने का फैसला किया है। इस कोड मैंने लिखा है:सी # अस्पष्टता त्रुटि जब गुणों का उपयोग किया जाता है

class Dog 
{ 
    private int weight; 
    private string colour; 
    public string colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     weight = theWeight; 
     colour = theColour; 
    } 
} 

और मैं एक अस्पष्टता त्रुटि मिलती है। जहां तक ​​मैं समझता हूं, ऐसा नहीं होना चाहिए।

+0

जब आप संपत्ति के लिए ऊपरी-केस 'सी' का उपयोग करते हैं तो क्या होता है रंग? –

उत्तर

11

आपके पास एक क्षेत्र और एक संपत्ति है जिसका नाम colour है। यही कारण है कि संकलक एक त्रुटि उत्पन्न करता है।

5

आपके पास एक ही नाम के साथ एक फ़ील्ड और संपत्ति दोनों नहीं हो सकती है।

आपको दो colour पहचानकर्ताओं में से एक का नाम बदलने की आवश्यकता है।

6

अस्पष्टता त्रुटि यह है कि आपने फ़ील्ड और संपत्ति का नाम वही नाम "रंग" रखा है। संपत्ति परिभाषा को बदल दें f.e.

public string Colour 
{ 
get { return colour;} 
set { colour = value;} 
} 
4
लाइन

colour = theColour; 

संकलक नहीं बता सकता तुम क्या मतलब है में

। यह या तो

private string colour; 

हो सकता है या यह

public string colour { get; set } 

चुनने एक अलग नामकरण परंपरा में मदद करता है को स्पष्ट करने के लिए हो सकता है। उदाहरण के लिए आप चुन सकते हैं कि गुणों में एक अपरकेस पहला अक्षर है और फ़ील्ड अंडरस्कोर और लोअर केस लेटर से शुरू होते हैं। उस स्थिति में आपकी कक्षा निम्नानुसार दिखाई देगी:

class Dog 
{ 
    private int _weight; 
    private string _colour; 
    public string Colour { get; set; } 
    public Dog(int theWeight, string theColour) 
    { 
     _weight = theWeight; 
     _colour = theColour; 
    } 
} 

नोट, हालांकि, आपके पास शायद यहां कोई डुप्लिकेशंस है। संभावना है कि पहली जगह में स्वचालित संपत्ति रंग और फ़ील्ड _colour दोनों होने का आपका इरादा नहीं था।

आप सुझाए गए दिशानिर्देशों का पालन करने में आपकी सहायता के लिए एक टूल भी चुन सकते हैं। उदाहरण के तौर पर FxCop पर एक नज़र डालें। सही या गलत नहीं है लेकिन नियमों के साथ काम करना निश्चित रूप से आसान है जो आम तौर पर स्वीकार किए जाते हैं। (माना जाता है कि खेतों के लिए अंडरस्कोर का उपयोग करने के लिए मेरा सुझाव आम तौर पर स्वीकार किए जाने वाले कार्यों के अनुरूप नहीं है। हालांकि, मैं सार्वजनिक क्षेत्रों का उपयोग नहीं करता हूं।)

+0

इस तरह से उपयोग करने से 2 अलग-अलग रंग गुण/चर के साथ समाप्त हो जाएगा। शायद उपयोगकर्ता केवल एक चाहता है (_colour हटाएं) – RvdK

+0

हां। यही कारण है कि मैंने अपने जवाब में उल्लेख किया: "ध्यान दें, हालांकि, आपके पास शायद यहां कोई डुप्लिकेशंस है। संभावना है कि स्वचालित संपत्ति रंग और फ़ील्ड _colour दोनों को पहले स्थान पर रखना आपके इरादे से नहीं था।" – Manfred

1

ध्यान दें कि आपके उदाहरण में, यदि आप सी # 3.0 या ऊपर का उपयोग कर रहे हैं, ,

अधिक इसे यहाँ के बारे में विवरण ... http://msdn.microsoft.com/en-us/library/bb384054.aspx

यह या तो प्रोग्रामर और संकलक द्वारा, भ्रम की समस्याओं से बचने होगा: तुम सच में उन निजी क्षेत्रों की जरूरत नहीं है और ऑटो कार्यान्वित गुणों का उपयोग कर सकते हैं और पठनीयता में सुधार।

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