我在重载索引器属性时遇到了问题。
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
请建议我如何实施?
答案 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的样子。