• 所引起转载


    C#索引器

     

    索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。

    索引器和数组比较:

    (1)索引器的索引值(Index)类型不受限制

    (2)索引器允许重载

    (3)索引器不是一个变量

    索引器和属性的不同点

    (1)属性以名称来标识,索引器以函数形式标识

    (2)索引器可以被重载,属性不可以

    (3)索引器不能声明为static,属性可以

    一个简单的索引器例子

    复制代码
    using System;
    using System.Collections;
     public class IndexerClass
    {
        private string[] name = new string[2];
    
        //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
        public string this[int index]
        {
            //实现索引器的get方法
            get
            {
                if (index < 2)
                {
                    return name[index];
                }
                return null;
            }
    
            //实现索引器的set方法
            set
            {
                if (index < 2)
                {
                    name[index] = value;
                }
            }
        }
    }
    public class Test
    {
        static void Main()
        {
            //索引器的使用
            IndexerClass Indexer = new IndexerClass();
            //“=”号右边对索引器赋值,其实就是调用其set方法
            Indexer[0] = "张三";
           Indexer[1] = "李四";
            //输出索引器的值,其实就是调用其get方法
            Console.WriteLine(Indexer[0]);
           Console.WriteLine(Indexer[1]);
        }
    }
    复制代码

     以字符串作为下标,对索引器进行存取

    复制代码
    public class IndexerClass
    {
        //用string作为索引器下标的时候,要用Hashtable
        private Hashtable name = new Hashtable();
    
        //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
        public string this[string index]
        {
            get { return name[index].ToString(); 
            set { name.Add(index, value); }
        }
    }
    public class Test
    {
        static void Main()
        {
            IndexerClass Indexer = new IndexerClass();
            Indexer["A0001"] = "张三";
            Indexer["A0002"] = "李四";
            Console.WriteLine(Indexer["A0001"]);
            Console.WriteLine(Indexer["A0002"]);
        }
    }
    复制代码

     索引器的重载

    复制代码
    public class IndexerClass
    {
        private Hashtable name = new Hashtable();
    
        //1:通过key存取Values
        public string this[int index]
        {
            get { return name[index].ToString(); }
            set { name.Add(index, value); }
        }
    
        //2:通过Values存取key
        public int this[string aName]
        {
            get
            {
                //Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntry
                foreach(DictionaryEntry d in name)
                {
                    if (d.Value.ToString() == aName)
                    {
                        return Convert.ToInt32(d.Key);
                    }
                }
                return -1;
            }
            set
            {
                name.Add(value, aName);
            }
        }
    }
    public class Test
    {
        static void Main()
        {
            IndexerClass Indexer = new IndexerClass();
    
            //第一种索引器的使用
            Indexer[1] = "张三";//set访问器的使用
            Indexer[2] = "李四";
           Console.WriteLine("编号为1的名字:" + Indexer[1]);//get访问器的使用
            Console.WriteLine("编号为2的名字:" + Indexer[2]);
    
            Console.WriteLine();
            //第二种索引器的使用
            Console.WriteLine("张三的编号是:" + Indexer["张三"]);//get访问器的使用
            Console.WriteLine("李四的编号是:" + Indexer["李四"]);
           Indexer["王五"] = 3;//set访问器的使用
            Console.WriteLine("王五的编号是:" + Indexer["王五"]);
        }
    }
  • 相关阅读:
    mysql5.6版本修改密码
    ASP.NET Core MVC 运行所选代码生成器时出错
    abp ef codefirst 设置默认值
    resharper激活
    Ioc(控制反转)、DI(依赖注入)
    统计mysql数据库中数据表/字段等数量的sql
    HeidiSQL安装和使用教程
    mysql的安装步骤
    项目分层的好处
    Python IDLE 的使用与调试
  • 原文地址:https://www.cnblogs.com/haimingkaifa/p/6210842.html
Copyright © 2020-2023  润新知