C#属性 get和set如何使用

C#索引器

C#中的索引器(Indexers)是一种特殊类型的属性,它允许类或结构体按照索引来访问其元素,就像数组一样。索引器使您可以使用方括号([])语法来访问对象的元素,而不是传统的点号(.)语法。这在处理类似集合的数据结构时非常有用。

索引器的定义

索引器的定义与属性非常相似,但是使用的是方括号 [] 而不是圆括号 (). 下面是一个简单的索引器定义示例:

public class MyCollection
{
    private List<int> items = new List<int>();

    public int this[int index]
    {
        get
        {
            if (index < 0 || index >= items.Count)
                throw new ArgumentOutOfRangeException("index", "Index is out of range.");

            return items[index];
        }
        set
        {
            if (index < 0 || index >= items.Count)
                throw new ArgumentOutOfRangeException("index", "Index is out of range.");

            items[index] = value;
        }
    }
}

在这个例子中,MyCollection 类定义了一个名为 this[int index] 的索引器。这个索引器有两个访问器:getset。这两个访问器都检查索引是否有效,并且在索引有效的情况下返回或设置相应的值。

使用索引器

定义了索引器之后,就可以像访问数组一样来访问对象的元素:

class Program
{
    static void Main()
    {
        MyCollection collection = new MyCollection();
        collection.Add(10); // 假设有这样的方法来添加元素
        collection.Add(20);
        collection.Add(30);

        Console.WriteLine(collection[1]); // 输出: 20
        collection[1] = 25;
        Console.WriteLine(collection[1]); // 输出: 25
    }
}

多参数索引器

除了单个整数索引外,还可以定义多参数索引器。例如,如果您有一个二维数据结构,可能希望使用两个索引来访问元素:

public class Matrix
{
    private int[,] data = new int[3, 3];

    public int this[int row, int column]
    {
        get
        {
            return data[row, column];
        }
        set
        {
            data[row, column] = value;
        }
    }
}

在这个例子中,Matrix 类使用两个整数索引来访问矩阵中的元素。

索引器的注意事项

  1. 命名习惯:索引器通常命名为 this,并且后面跟着索引参数列表。这是因为编译器需要知道这是一个索引器而不是普通的属性。
  2. 类型:索引器的类型应该是返回的值的类型。对于集合来说,这通常是元素的类型。
  3. 异常处理:在索引器的 getset 方法中进行边界检查,并且在必要时抛出异常(如 ArgumentOutOfRangeException)是非常重要的。
  4. 性能考虑:索引器可以提高代码的可读性和可用性,但在性能敏感的应用中,直接访问数组或集合可能会更快。

通过使用索引器,您可以为自己的类或结构体提供类似于数组的访问方式,这有助于编写更清晰、更自然的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值