索引器

基础概念

索引器,将一个对象变的可以像数组一样使用下标访问,索引器的创建类似属性,都需要设置Get和Set方法。
创建格式:

type this[int index]
{
   // get 访问器
   get
   {
      // 返回 index 指定的值
   }

   // set 访问器
   set
   {
      // 设置 index 指定的值
   }
}

注意事项

  • 属性的各种用法同样适用于索引器。 此规则的唯一例外是“自动实现属性”。 编译器无法始终为索引器生成正确的存储。
  • 只要每个索引器的参数列表是唯一的,就可以对一个类型定义多个索引器。

代码示例

IndexNames类创建了基本的索引器,索引器内部对rectangles列表进行操作。

public class IndexNames
{

    public List<Rectangle> rectangles = new List<Rectangle>();

    public Rectangle this[int index]
    {
        get
        {
            if(this.rectangles[index] != null)
            {
                Rectangle r = rectangles[index];
                return r;
            }
            return null;
        }

        set
        {
            if (index > 0 && index < rectangles.Count)
            {
                rectangles[index] = value;
            }
        }
    }

    public IndexNames()
    {
        this.rectangles.Add(new Rectangle(10, 10));
        this.rectangles.Add(new Rectangle(20, 20));
        this.rectangles.Add(new Rectangle(30, 30));
        this.rectangles.Add(new Rectangle(40, 40));
    }
}

上面代码提到的Rectangle类

public class Rectangle
{
    // 成员变量
    protected double length;
    protected double width;
    public double Test;
    public Rectangle(double l, double w)
    {
        length = l;
        width = w;
    }
    [DeBugInfo(55, "Zara Ali", "19/10/2012",
    Message = "Return type mismatch")]
    public double GetArea()
    {
        return length * width;
    }
    [DeBugInfo(56, "Zara Ali", "19/10/2012")]
    public void Display()
    {
        Console.WriteLine("Length: {0}", length);
        Console.WriteLine("Width: {0}", width);
        Console.WriteLine("Area: {0}", GetArea());
    }

    public void GetString()
    {
        Debug.Log($"Length:{length}width:{width}Area:{GetArea()}");
    }
}

表现

循环输出索引的内容

        IndexNames indexs = new IndexNames();

        for (int i = 0; i < indexs.rectangles.Count; i++)
        {
            indexs[i].GetString();
        }

输出:

总结

只要类中有类似于属性的元素就应创建索引器,此属性代表的不是一个值,而是值的集合,其中每一个项由一组参数标识。 这些参数可以唯一标识应引用的集合中的项。 索引器延伸了属性的概念,索引器中的一个成员被视为类外部的一个数据项,但又类似于内部的一个方法。 索引器允许参数在代表项的集合的属性中查找单个项。

posted @ 2024-10-18 11:29  请明月  阅读(12)  评论(0编辑  收藏  举报