2011-02-24 20 views
26

इसके साथ नेट 4 में एक वर्ग बनाने के लिए संभव है: "आइटम" नामकक्षा नाम "आइटम"

  1. एक इंडेक्सर,
  2. एक संपत्ति?

उदाहरण के लिए, इस सी # वर्ग मेरे लिए संकलन नहीं होगा:

public class MyClass 
{ 
    public object Item { get; set; } 
    public object this[string index] { get { return null; } set { } } 
} 

संकलक एक त्रुटि CS0102 देता है:

प्रकार 'MyClass' पहले से ही 'आइटम के लिए एक परिभाषा में शामिल है '

हालांकि मैं केवल स्पष्ट रूप से Item को परिभाषित कर रहा हूं।

उत्तर

37

पर this site आधार पर, यह अनुक्रमणिका

public class MyClass 
{ 
    public object Item { get; set; } 
    [System.Runtime.CompilerServices.IndexerName("MyItem")] 
    public object this[string index] { get { return null; } set { } } 
} 
4

यदि मुझे सही याद है, तो ऐसे सूचकांक को "आइटम()" विधि के माध्यम से VB.Net से एक्सेस किया जा सकता है। वह वही होगा जहां "दो बार परिभाषित" आता है।

23

सी # आंतरिक रूप से एक संपत्ति भाषाओं कि इंडेक्सर का समर्थन नहीं करते के लिए Item कहा जाता है बनाता है नाम बदलने के लिए एक विशेषता का उपयोग करना संभव है। आप IndexerNameAttribute का उपयोग करके इस नाम को नियंत्रित कर सकते हैं, जैसे:

[IndexerName("MyIndexer")] 
public object this[string index] 
{ 
    get { return blah; } 
}