2009-01-08 15 views
223

में ओवरलोड कैसे करूं मैं एक कक्षा में ऑपरेटर जोड़ना चाहता हूं। मेरे पास वर्तमान में GetValue() विधि है जिसे मैं एक [] ऑपरेटर के साथ प्रतिस्थापित करना चाहता हूं।मैं [] ऑपरेटर को सी #

class A 
{ 
    private List<int> values = new List<int>(); 

    public int GetValue(int index) 
    { 
     return values[index]; 
    } 
} 

उत्तर

586
public int this[int key] 
{ 
    get 
    { 
     return GetValue(key); 
    } 
    set 
    { 
     SetValue(key,value); 
    } 
} 
+118

यह क्यों है कि हर बार जब मुझे एक इंडेक्स ऑपरेटर को लागू करने की आवश्यकता होती है, तो मुझे इसे देखना होगा? और हर बार जब मैं इस जवाब पर समाप्त होता हूं ... इच्छा है कि मैं इसे कई बार वोट दे सकता हूं :) – DSO

+6

यह बहुत बढ़िया है। क्या यह एक इंटरफ़ेस में किया जा सकता है? ''इंटरफेस आईसीएएच { ऑब्जेक्ट [स्ट्रिंग कुंजी] {प्राप्त करें; सेट; } } '' ** संपादित करें: ** [हां।] (Http://stackoverflow.com/questions/9586625/how-to-define-indexer-behaviour-to-an-interface) – Michael

+14

नहीं पता कि उन्होंने क्यों चुना इस घोषणा में 'ऑपरेटर' शब्द को छोड़ने के लिए - यह गलती है जो मैं हमेशा करता हूं! अच्छा जवाब –

55

मेरा मानना ​​है कि यह आपके लिए क्या देख रहे है:

Indexers (C# Programming Guide)

class SampleCollection<T> 
{ 
    private T[] arr = new T[100]; 
    public T this[int i] 
    { 
     get 
     { 
      return arr[i]; 
     } 
     set 
     { 
      arr[i] = value; 
     } 
    } 
} 

// This class shows how client code uses the indexer 
class Program 
{ 
    static void Main(string[] args) 
    { 
     SampleCollection<string> stringCollection = 
      new SampleCollection<string>(); 
     stringCollection[0] = "Hello, World"; 
     System.Console.WriteLine(stringCollection[0]); 
    } 
} 
7
public int this[int index] 
    { 
     get 
     { 
      return values[index]; 
     } 
    } 
+2

यह उत्तर कैसे 5 बार मतदान किया गया, जबकि इसका पालन नहीं किया जा सकता !!!!!!! आप एक्सेस प्राप्तकर्ता गायब हैं !! –

+2

@HakamFostok यह उत्तर सात साल से अधिक पुराना है, और किसी ने कभी भी देखा नहीं है। अच्छा निर्णय। मैं अब संपादित करूंगा। – BFree

26

[] ऑपरेटर एक इंडेक्सर कहा जाता है। आप इंडेक्सर्स प्रदान कर सकते हैं जो एक पूर्णांक, एक स्ट्रिंग, या किसी अन्य प्रकार को लेते हैं जिसे आप कुंजी के रूप में उपयोग करना चाहते हैं। संपत्ति एक्सेसर्स के समान सिद्धांतों के बाद वाक्यविन्यास सरल है।

उदाहरण के लिए, आपके मामले में जहां एक int है कुंजी या सूचकांक:

public int this[int index] 
{ 
    get 
    { 
    return GetValue(index); 
    } 
} 

तुम भी एक सेट एक्सेसर ताकि इंडेक्सर पढ़ा हो जाता है जोड़ सकते हैं और केवल पढ़ने के लिए बस के बजाय लिख सकते हैं।

public int this[int index] 
{ 
    get 
    { 
    return GetValue(index); 
    } 

    set 
    { 
    SetValue(index, value); 
    } 
} 

यदि आप किसी भिन्न प्रकार का उपयोग करके इंडेक्स करना चाहते हैं, तो आप केवल सूचकांक के हस्ताक्षर को बदल दें।

public int this[string index] 
... 
संबंधित मुद्दे