我做了大量搜索,发现了大量的示例和教程,但在写入[]
运算符时仍然无法弄清楚如何获取值...
我觉得我疯了。我必须遗漏一些非常简单的东西
据我所知,get
和set
有一个功能,它看起来像这样:
V& operator[](string K);
或者这个:
double &operator[](int n);
现在很棒,我们可以得到的是:
a[HERE]
HERE
成为double &operator[](int HERE);
我们可以轻松使用它
但我们如何得到的是:
a[4] = HERE
C#有两个非常清晰的get和set方法,其value关键字代表被分配的对象。
public string this[int key]
{
get
{
if(key == 1)
return "1!";
if(key == 2)
return "2!";
else
return "3!";
}
set
{
if( value == "setting") //value is a[3] = THIS
this.isSet = true;
}
}
答案 0 :(得分:8)
不要将operator[]
视为获取或设置的功能,这可能会令人困惑。将其视为正常功能。实际上,让我们将其重新编写为正常函数:
struct X
{
int arr[10];
int& getIndex(int idx) { return arr[idx]; }
};
//...
//initialize x of type X
x.getIndex(3) = 42;
方法x.getIndex(3)
将返回对成员数组idx
中第4个元素的引用。因为您通过引用返回,返回值是一个l值并引用该确切元素,因此您可以为其指定一个值,例如42
。这将修改成员x.arr[3]
,因为该函数返回该特定对象的别名。
现在,您可以完全按照operator[]
重新编写此内容
struct X
{
int arr[10];
int& operator[](int idx) { return arr[idx]; }
};
并通过调用
获得相同的结果x[3];
甚至
x.operator[](3);
运算符选项只是语法糖。