问题在C#中重载索引器

时间:2010-05-26 07:16:49

标签: c# c#-3.0

我在重载索引器属性时遇到了问题。

public class ClassName 
{
    private int[] a;
    private int[] b;
    private string[] c;
    private string[] d;

    public int this[int pos]
    {
        get{ return a[pos];}
        set{a[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return b[pos];}
        set{b[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return c[pos];}
        set{c[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return d[pos];}
        set{d[pos] = value;}
    }
}

我正在Error 1 'Class1 variables' already defines a member called 'this' with the same parameter types

请建议我如何实施?

3 个答案:

答案 0 :(得分:3)

你用相同的签名定义了这个[](带一个int,返回一个int)多次。

编译器如何知道要采用哪一个?

最好使你的数组​​属性(这次索引属性真的会派上用场!)

并将属性的set方法设为私有,否则他们可以覆盖数组而不只是更改值。

所以更多地帮助TS:

public class Test
{
    private string[] _a;
    private int[] _b;

    public string[] A
    {
        get { return this._a; }
        private set { this._a = value; }
    }

    public int[] B
    {
        get { return this._b; }
        private set { this._b = value; }
    }

    public Test()
    {
        // todo add ctor logic here
    }
}

// now you can do:

Test t = new Test();

t.A[1] = "blah"; // assuming that index of the array is defined.
祝你好运

答案 1 :(得分:2)

想象一下这个索引器被另一个类调用:

ClassName myClass = new ClassName();
myClass[0]; // Which one???

答案 2 :(得分:1)

错误意味着它所说的。您有四个具有完全相同签名的属性。

你想做什么?显示您希望代码使用 ClassName的样子。