c# 索引器方法

索引器方法允许我们构建能够以类似访问数组的语法来访问内部子类型的自定义类型

在语法上索引器方法和属性的定义很类似,一样是使用get,set,不同的是索引器是使用this[]创建的。

一个简单的索引器代码:

    /// <summary>
    /// 汽车类容器
    /// </summary>
    public class CarList
    {
        private ArrayList al = new ArrayList();

        /// <summary>
        /// 索引器
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public Car this[int index]
        {
            get { return (Car)al[index]; }
            set { al.Insert(index, value); }
        }
    }

    /// <summary>
    /// 汽车类
    /// </summary>
    public class Car
    {
        public string Name { get; set; }
    }

    static void Main(string[] args)
    {
         CarList list = new CarList
         {
             [0] = new Car() { Name = "Car1" },
             [1] = new Car() { Name = "Car2" }
         };
         Console.WriteLine(list[0].Name);
    }

使用字符串值索引对象

/// <summary>
    /// 汽车类容器
    /// </summary>
    public class CarList
    {
        private Dictionary<string,object> al = new Dictionary<string, object>();

        /// <summary>
        /// 索引器,这里使用字符串索引
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public Car this[string index]
        {
            get { return (Car)al[index]; }
            set { al[index] = value; }
        }
    }

    /// <summary>
    /// 汽车类
    /// </summary>
    public class Car
    {
        public string Name { get; set; }
    }

    static void Main(string[] args)
    {
          
         CarList list = new CarList
         {
             ["car1"] = new Car() { Name = "Car1" },
             ["car2"] = new Car() { Name = "Car2" }
         };
         Console.WriteLine(list["car1"].Name);
     }

可以看出索引器是可以重载的;

虽然在构建自定义集合时,索引器方法很常见,但是记住在泛型类型中(如:List<T>)已经实现索引器,在例子(只是例子)中完全可以使用List<Car>实现。

 

posted @ 2017-01-16 17:18  海棠厅畔  阅读(259)  评论(0编辑  收藏  举报