在以下索引器代码块中,我们为什么需要:
public string this[int pos]
{
get
{
return myData[pos];
}
set
{
myData[pos] = value;
}
}
这个[int pos]中的“this”到底是做什么的?感谢
/// Indexer Code Block starts here
using System;
/// <summary>
/// A simple indexer example.
/// </summary>
class IntIndexer
{
private string[] myData;
public IntIndexer(int 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;
}
}
static void Main(string[] args)
{
int size = 10;
IntIndexer myInd = new IntIndexer(size);
myInd[9] = "Some Value";
myInd[3] = "Another Value";
myInd[5] = "Any Value";
Console.WriteLine("\nIndexer Output\n");
for (int i = 0; i < size; i++)
{
Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
}
}
}
答案 0 :(得分:4)
这意味着您可以在对象本身上使用索引器(就像数组一样)。
class Foo
{
public string this[int i]
{
get { return someData[i]; }
set { someData i = value; }
}
}
// ... later in code
Foo f = new Foo( );
string s = f[0];
答案 1 :(得分:3)
从c#语法角度来看:
您需要this
因为 - 您还会如何声明它?类的功能必须具有引用它的名称或地址。
方法签名是:
[modifiers] [type] [name] (parameters)
public string GetString (Type myparam);
属性签名是:
[modifiers] [type] [name]
public string MyString
字段签名是:
[modifiers] [type] [name]
public string MyString
由于索引器没有名称,所以写下来没有多大意义:
public string [int pos]
因此我们使用this
来表示它的“名称”。
答案 2 :(得分:2)
这只是编译器知道该属性具有索引器语法的标记。
在这种情况下,它使myInd能够使用“数组语法”(例如myInd [9])。
答案 3 :(得分:0)
'this'关键字表示您正在定义在访问类时将调用的行为,就像它是一个数组一样。由于您为类实例定义了行为,因此在该上下文中使用'this'关键字是有意义的。你没有调用myInd.indexer [],你调用myInd []。
答案 4 :(得分:0)
它允许您的类以与数组类似的方式运行。在这种情况下,您的索引器允许您从IntIndexer类外部透明地引用myData。
如果您没有声明索引器,则以下代码将失败:
myInd[1] = "Something";
答案 5 :(得分:0)
您的案例中的“this”指定此属性是此类的indexer。这是C#中用于在类上定义索引器的语法,因此您可以像以下一样使用它:
myInd[9] = ...