[C#] मैं सी # में स्क्वायर-ब्रैकेट ऑपरेटर को कैसे अधिभारित करूं?


Answers

यह आइटम संपत्ति होगी: http://msdn.microsoft.com/en-us/library/0ebtbkkc.aspx

शायद ऐसा कुछ काम करेगा:

public T Item[int index, int y]
{ 
    //Then do whatever you need to return/set here.
    get; set; 
}
Question

डेटाग्रिड व्यू, उदाहरण के लिए, आपको यह करने देता है:

DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];

लेकिन मेरे जीवन के लिए मुझे इंडेक्स / स्क्वायर-ब्रैकेट ऑपरेटर पर प्रलेखन नहीं मिल रहा है। वे इसे क्या कहते हैं? इसे कहां लागू किया जाता है? क्या यह फेंक सकता है? मैं अपनी खुद की कक्षाओं में एक ही चीज़ कैसे कर सकता हूं?

ईटीए: सभी त्वरित उत्तरों के लिए धन्यवाद। संक्षेप में: प्रासंगिक दस्तावेज "आइटम" संपत्ति के तहत है; ओवरलोड करने का तरीका public object this[int x, int y]{ get{...}; set{...} } जैसे संपत्ति को घोषित करना है public object this[int x, int y]{ get{...}; set{...} } public object this[int x, int y]{ get{...}; set{...} } ; DataGridView के लिए सूचकांक कम से कम प्रलेखन के अनुसार फेंक नहीं देता है। यह उल्लेख नहीं करता है कि क्या होता है यदि आप अमान्य निर्देशांक की आपूर्ति करते हैं।

ईटीए दोबारा: ठीक है, भले ही प्रलेखन इसका कोई उल्लेख नहीं करता है (शरारती माइक्रोसॉफ्ट!), यह पता चला है कि डेटाग्रिड व्यू के लिए इंडेक्स वास्तव में एक ArgumentOutOfRangeException फेंक देगा यदि आप इसे अवैध निर्देशांक के साथ आपूर्ति करते हैं। निष्पक्ष चेतावनी।




यदि आप सरणी इंडेक्सर का मतलब रखते हैं, तो आप केवल एक इंडेक्सर प्रॉपर्टी लिखकर अधिभारित करते हैं .. और आप ओवरलोड कर सकते हैं, (जितना चाहें उतना लिखें) इंडेक्सर गुण जब तक प्रत्येक के पास एक अलग पैरामीटर हस्ताक्षर होता है

public class EmployeeCollection: List<Employee>
{
    public Employee this[int employeeId]
    {   
        get 
        { 
            foreach(var emp in this)
            {
                if (emp.EmployeeId == employeeId)
                    return emp;
            }

            return null;
        }
    }

    public Employee this[string employeeName]
    {   
        get 
        { 
            foreach(var emp in this)
            {
                if (emp.Name == employeeName)
                    return emp;
            }

            return null;
        }
    }
}



यदि आप सी # 6 या बाद में उपयोग कर रहे हैं, तो आप केवल-प्राप्त सूचकांक के लिए अभिव्यक्ति-बॉडी सिंटैक्स का उपयोग कर सकते हैं:

public object this[int i] => this.InnerList[i];




public class CustomCollection : List<Object>
{
    public Object this[int index]
    {
        // ...
    }
}



Links