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&

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

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/caojiannan/p/7498043.html
Copyright © 2011-2022 走看看