通过索引器访问 C# 中的属性
本文关键字:属性 访问 索引 | 更新日期: 2023-09-27 18:32:42
C# 允许您重写 this
属性的数组索引器,如下所示:
int this[int index]
{
get { return _hidden[index]; }
set { _hidden[index] = value; }
}
int[] _hidden;
但是,我想通过索引访问不同名称的属性,如下所示:
int Hidden[int index]
{
get { return _hidden[index]; }
set { _hidden[index] = value; }
}
int[] _hidden;
我知道我可以通过将它用作常规参数来解决此问题,如下所示:
int Hidden(int index)
{
return _hidden[index];
}
void Hidden(int index, int value)
{
_hidden[index] = value;
}
int[] _hidden;
但是,我以这种方式失去了命名属性的便利性,我实质上是返回到公开命名的 get/set 方法。此外,由于我在幕后访问数组的成员,因此数组索引表示法在概念上对我的情况更有意义。
有没有办法将运算符的便利性与数组索引器结合起来?
属性不能像可索引项一样运行,除非它返回一个。您有两种选择:
- 返回后台已有的数组、列表或其他项
- 创建一个提供索引器并返回值的对象
第一个很简单,但它允许更改数组/列表/任何内容。第二个只能有一个 getter,因此它可以成为只读的。
我很确定,如果需要,使用索引器和 getter 制作一个通用模板来封装存储值的实际对象不会有很多行代码。