c#索引器

1.索引器:C#中的类成员,使得对象可以像数组一样被引用,使程序看起来更直观。

一个简单的案例:

 1   class TestIdx
 2     {
 3         public string this[int i]
 4         {
 5             get {
 6                 return names[i];
 7             }
 8             set {
 9                 names[i] = value;
10             }
11         }
12         private string[] names= {"lily","lucy","tom" }; //私有字段names
13     }

 

1  static void Main(string[] args)
2         {
3             TestIdx tidx = new TestIdx();
4             string str_name = tidx[0]; //调用get方法,取值
5             tidx[1] = "sam";           //给索引器赋值,其实就是调用set方法
6             Console.ReadKey();
7         }
TestIdx 这个类的实例显然不能直接操作private字段names,可以在类中定义一个索引器,来达到操作names的目的

2.索引器语法:

从以上这个最简单的案例总结一下索引器的语法: [权限修饰符] 返回值类型 this[参数类型 参数名]

                      {

                         get 方法 

                       set方法

                      }

ps:可能我理解的不够深,处于封装的考虑,保护成员变量,存储集合类对象设置为私有,然后设置访问他们的方法,那么把访问他们的方法也设为私有,我理解不了,pativate类型的索引器有什么作用,在我看来就是闲的蛋疼。

3.索引器与属性同为c#的语法糖,这里做一下比较:

         属性用名称来标识,名称随便取,索引器用this关键字来标记;

         索引器有参数列表,和一般的方法不同之处在于写在了[]中...,所以索引器可以重载,属性当然不可以了;

         属性可以用static修饰,索引器不行,索引器只能通过实例来操作。

         需要特别注意的是不光只能通过数字索引,还可以是字符串等类型,索引器也允许多个索引器参数:

   字符串索引案例:

   class TestIdx2 {
        public Dictionary<string, string> dic = new Dictionary<string, string>() { {"a1","aaa"},
            {"b1","bbb" }, {"c1","ccc" } };
        
        public string this[string str]
        {
            get {
                return dic[str];
            }
            set {
                dic[str] = value;
            }
        }
    }
  static void Main(string[] args)
        {
            TestIdx2 idx2 = new TestIdx2();
            string stmp = idx2["a1"];  //get方法,取值
            idx2["b1"] = "ccccc";  //set方法,赋值
            Console.ReadKey();
        }

多个索引器参数(案例没什么实际意义):

    class Person
    {

        public string this[int x, int y]
        {
            get
            {
                return "" + x + y;
            }
            set
            {
                Console.WriteLine("x=" + x + ",y=" + y + ",value=" + value);
            }
        }

    }
  static void Main(string[] args)
        {

            Person p1 = new Person();
            p1[1, 2] = "hello";
            string s = p1[1, 2];
            Console.WriteLine(s);
        }

 

         

 

 

posted @ 2017-09-09 13:34  Finder~  阅读(2070)  评论(0编辑  收藏  举报