通过索引器访问 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 方法。此外,由于我在幕后访问数组的成员,因此数组索引表示法在概念上对我的情况更有意义。

有没有办法将运算符的便利性与数组索引器结合起来?

通过索引器访问 C# 中的属性

属性不能像可索引项一样运行,除非它返回一个。您有两种选择:

  • 返回后台已有的数组、列表或其他项
  • 创建一个提供索引器并返回值的对象

第一个很简单,但它允许更改数组/列表/任何内容。第二个只能有一个 getter,因此它可以成为只读的。

我很确定,如果需要,使用索引器和 getter 制作一个通用模板来封装存储值的实际对象不会有很多行代码。