如何在C#中重载默认get、set方法?带索引实现遇编译失败
解决C#中带索引的get/set访问器实现问题
嗨,我来帮你搞定这个编译错误,以及实现你想要的带索引的get/set功能~
首先得先指出你代码里的几个关键问题:
- 数组声明语法错误:C#里数组的正确声明方式是
private int[] xx = new int[2];,而不是你写的private int xx[2];,后者是C/C++的写法,C#不支持。 - 普通属性不能带参数化的get/set:你试图给
public int Xx这个普通属性的get、set加参数,但C#的普通属性访问器是无参的。带索引的这种访问逻辑,应该用**索引器(Indexer)**来实现,这才是C#里专门用来支持类似数组式访问的语法。
正确的实现方案
下面是符合你需求的代码示例,用索引器来实现带索引的get和set:
public class YourClass { // 正确声明数组并初始化 private int[] xx = new int[2]; // 定义索引器,允许通过类实例[index]的方式访问 public int this[int index] { get { // 修复你原代码里的逻辑错误:index ==1 返回bool,不能直接当数组索引 // 这里假设你想判断索引是否为1,对应取xx[1],否则取xx[0] return index == 1 ? xx[1] : xx[0]; } set { // 同样修复逻辑,给对应索引的数组元素赋值 if (index == 1) xx[1] = value; else xx[0] = value; } } }
使用方式
这样你就可以像操作数组一样访问你的类实例了:
var obj = new YourClass(); obj[0] = 5; // 调用set方法,给xx[0]赋值 int val = obj[1]; // 调用get方法,获取xx[1]的值
进阶优化:添加索引合法性检查
为了避免索引越界的问题,你可以在索引器里加上合法性校验:
public int this[int index] { get { if (index < 0 || index >= xx.Length) throw new IndexOutOfRangeException($"索引 {index} 超出范围,合法索引为0和1"); return xx[index]; } set { if (index < 0 || index >= xx.Length) throw new IndexOutOfRangeException($"索引 {index} 超出范围,合法索引为0和1"); xx[index] = value; } }
如果你同时需要一个普通属性(比如访问数组的第一个元素),可以额外添加一个普通属性,和索引器互不冲突:
public int Xx { get => xx[0]; set => xx[0] = value; }
内容的提问来源于stack exchange,提问作者elections 12
相关产品推荐
相关产品推荐

