我目前正在研究索引器章节,但我无法理解以下代码的“this [int pos]”和“this [string data]”。有人可以帮助我吗?
class OvrIndexer
{
private string[] myData;
private int arrSize;
public OvrIndexer(int size)
{
arrSize = size;
myData = new string[size];
for (int i=0; i < size; i++)
{
myData[i] = "empty";
}
}
public string this[int pos]
{
get
{
return myData[pos];
}
set
{
myData[pos] = value;
}
}
public string this[string data]
{
get
{
int count = 0;
for (int i=0; i < arrSize; i++)
{
if (myData[i] == data)
{
count++;
}
}
return count.ToString();
}
set
{
for (int i=0; i < arrSize; i++)
{
if (myData[i] == data)
{
myData[i] = value;
}
}
}
}
答案 0 :(得分:1)
一个按整数访问索引,另一个按字符串访问:
var indexer = new OvrIndexer();
// Sets the first item of the indexer to "Value1"
indexer[0] = "Value1";
// Sets the item identified by key "Key2" to value "Value2"
indexer["Key2"] = "Value2";
答案 1 :(得分:0)
这只是为您的类定义索引器,因此您可以使用这样的语法来获取类内部数组的内容。
myOvrIndexer[3]
将返回myData数组的第4个元素。
myOvrIndexer["Test"]
将返回包含内容 Test 的第一个元素。
请注意,这个类几乎没用,因为它只是包装一个数组并且除了索引器接收字符串而不是索引之外不添加任何有用的功能,但是从学习的角度来看,这个类应该很好地解释发生了什么。
索引器的主要目的是避免必须创建方法,因此必须编写如下语法:
myOvrIndexer.GetElement(3);
myOvrIndexer.SetElement(3, myValue);
我认为我们都同意这种语法看起来更好:
myOvrIndexer[3];
myOvrIndexer[3] = myValue;
答案 2 :(得分:0)
this[int pos]
getter将返回指定索引处的值。
setter会将值设置为指定的索引。
,而
this[string data]
getter将返回您正在查找的值的出现次数。
setter将替换使用新值找到的所有值匹配。