zoukankan      html  css  js  c++  java
  • 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);
            }

             

     

    作者:#Finder&

    *本文为作者原创,版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    HDU1316 fib+高精度
    HDU1868
    HDU2586 LCA
    HDU1113 字符串处理
    HDU1115 几何+多边形重心
    HDU1124
    HDU1110 几何
    HDU1103
    HDU2670 DP
    linux 下查看机器是cpu是几核的
  • 原文地址:https://www.cnblogs.com/caojiannan/p/7498043.html
Copyright © 2011-2022 走看看