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作为索引器下标的时候,要用Hashtableprivate 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存取Valuespublic string this[int index]{get { return name[index].ToString(); }set { name.Add(index, value); }}//2:通过Values存取keypublic int this[string aName]{get{//Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntryforeach(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["王五"]);}
}

 多参索引器

using System;
using System.Collections;//入职信息类
public class EntrantInfo
{//姓名、编号、部门private string name;private int number;private string department;public EntrantInfo(){}public EntrantInfo(string name, int num, string department){this.name = name;this.number = num;this.department = department;}public string Name{get { return name; }set { name = value; }}public int Num{get { return number; }set { number = value; }}public string Department{get { return department; }set { department = value; }}
}//声明一个类EntrantInfo的索引器
public class IndexerForEntrantInfo
{private ArrayList ArrLst;//用于存放EntrantInfo类public IndexerForEntrantInfo(){ArrLst = new ArrayList();}//声明一个索引器:以名字和编号查找存取部门信息public string this[string name, int num]{get{foreach (EntrantInfo en in ArrLst){if (en.Name == name && en.Num == num){return en.Department;}}return null;}set{//new关键字:C#规定,实例化一个类或者调用类的构造函数时,必须使用new关键ArrLst.Add(new EntrantInfo(name, num, value));}}//声明一个索引器:以编号查找名字和部门public ArrayList this[int num]{get{ArrayList temp = new ArrayList();foreach (EntrantInfo en in ArrLst){if (en.Num == num){temp.Add(en);}}return temp;}}//还可以声明多个版本的索引器...
}public class Test
{static void Main(){IndexerForEntrantInfo Info = new IndexerForEntrantInfo();//this[string name, int num]的使用Info["张三", 101] = "人事部";Info["李四", 102] = "行政部";Console.WriteLine(Info["张三", 101]);Console.WriteLine(Info["李四", 102]);Console.WriteLine();//this[int num]的使用foreach (EntrantInfo en in Info[102]){Console.WriteLine(en.Name);Console.WriteLine(en.Department);}}
}

 

 



原文链接:http://www.cnblogs.com/ArmyShen/archive/2012/08/27/2659405.html

转载于:https://www.cnblogs.com/Percy_Lee/p/5160131.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取访客进站关键词_拼多多访客突然下降是为什么?拼多多访客突然暴涨又是怎么回事?...

在当下这个互联网时代&#xff0c;可以说流量就代表这金钱。这一点在做电商的商家那里表现的就更为直观了&#xff0c;如果你做了一个拼多多的店铺&#xff0c;之前店铺的流量一直都比较好&#xff0c;而现在拼多多店铺的流量忽然下降了&#xff0c;那么店铺中的销售额就会受到…

微信开发之 二维码生成类库

最近weiphp 二次开真的有点累&#xff0c;漏洞百出。代码维护代价有点高。 <?php /*** Created by PhpStorm.* User: bin* Date: 15-1-16* Time: 上午9:48*/ namespace Home\Common;// 微信处理类 set_time_limit(30); class Weixin{//构造方法static $qrcode_url "h…

通过Matlab实现离散序列卷积和

前言 年轻人&#xff0c;你对数学一无所知&#xff0c;你只是习惯了而已。—冯诺伊曼 Young man, in mathematics you dont understand things. You just get used to them.—John von Neumann。 一、卷积和是什么&#xff1f; 卷积的本质是描述一个瞬时动作&#xff08;激励…

Ansible 五(inventory文件 主机清单)

Ansible 五&#xff08;inventory文件 主机清单&#xff09;Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts除默认文件外,你还可以同时使用多个 inventory 文件(后面会讲到),也可以从动态源,或云上…

python series用法_如何使用Python中的Series字典创建数据框?

数据框是一种二维数据结构&#xff0c;其中数据以表格格式存储&#xff0c;以行和列的形式。它可以可视化为SQL数据表或excel工作表表示形式。可以使用以下构造函数创建它-pd.Dataframe(data, index, columns, dtype, copy)让我们了解如何使用Series字典创建数据框。系列是“熊…

[转载]android设置全屏和无标题

先介绍去掉标题栏的方法&#xff1a; 第一种&#xff1a;也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏注意这句一定要写在setContentView()方法的前面&#xff0c;不然会报错的 第二种&#xff1a;在AndroidManifest.xml文…

mac电脑下Tomcat和Apach配置流程(超详细)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 本章介绍在mac 电脑下如何配置Tomcat、Apach等环境 一、Apache介绍及配置 1.XAMPP安装 为了更好的进行各项软件服务的配置&#xff0c;引入快捷脚本工具——XMAPP。…

MVC 分页

后台代码: using Webdiyer.WebControls.Mvc; 1 public ActionResult Index(int id 1)2 {3 int pageIndex id;4 int count;5 int pageSize 7;6 7 List<News> newsList 8 newsSer.QueryByPage…

cvc 降噪_耳机降噪功能这么多,说说什么是ANC、ENC、CVC、DSP降噪

降噪功能对耳机的作用很重要&#xff0c;一是减少噪音&#xff0c;避免过度放大音量&#xff0c;从而减少对耳朵的损害。二是过滤噪音从而提高音质和通话质量。降噪可分为被动式降噪和主动式降噪。被动式降噪也就是物理降噪&#xff0c;被动式降噪是指利用物理特性将外部噪声与…

RPC 和 RESTful

2019独角兽企业重金招聘Python工程师标准>>> to do ... 转载于:https://my.oschina.net/u/2002769/blog/1505410

[linx] ubuntu网络重启命令

/etc/init.d/networking restart #这种方式必须有/etc/network/interface文件 ifconfig eth0 down #直接重启网卡 ifconfig eth0 up 转载于:https://www.cnblogs.com/fantasy01/p/4229734.html

密码学入门1——凯撒密码和三重DES加解密

实验目的 1、完成第一个入门加解密——凯撒密码 2、完成当下较为流行的三重DES加解密技术 3、熟悉所学的实际运用方向 实验准备 硬件&#xff1a;计算机或笔记本电脑 操作系统&#xff1a;Mac操作系统 IDE环境&#xff1a;Eclipse 程序语言&#xff1a;Java 一、实验基本…

老李谈JVM内存模型

老李谈JVM内存模型 poptest是国内唯一一家培养测试开发工程师的培训机构&#xff0c;以学员能胜任自动化测试&#xff0c;性能测试&#xff0c;测试工具开发等工作为目标。如果对课程感兴趣&#xff0c;请大家咨询qq&#xff1a;908821478&#xff0c;咨询电话010-84505200。 J…

emqx 使用端口_数据传输、存储、展现,EMQ X + TDengine 搭建 MQTT 物联网数据可视化平台...

物联网数据采集涉及到大量设备接入、海量的时序数据传输&#xff0c;EMQ X 消息中间件与 TDengine 大数据平台的组合技术栈完全能够胜任场景中的海量时间序列监测数据的传输、存储和计算。数据入库后&#xff0c;往往需要其他方式如数据可视化系统将数据按照规则统计、展现出来…

站点CSS样式不起作用,或仅仅有一部分起作用?随手记

事件&#xff1a;网页中使用了相同的样式&#xff0c;下半部分正常显示&#xff0c;上半部分样式所有丢失不能显示。解决&#xff1a;改动了相应的CSS样式文件的编码 这个是最没有想到的解决的方法。怎样调试&#xff1a;通过右键页面查看编码为UTF-8 或 GBK 看到样式正常显示&…

大数据--循序渐进的大数据(2)

一、Hdfs 架构 访问 (1) ----nameNode(2) |||dataNode每隔一段时间secondaryNameNode会将fsimage和edits进行合并产生心得fsimage&#xff1b;1、Hdfs 适用场景数据密集型并行计算计算密集并行计算2、不适合的场景HDFS不合适大量小文件的储存HDFS适用于高吞吐量&#xff0c;…

virtualbox 启动时Kernel driver not installed (rc=-1908) 错误的解决方法

virtualbox 启动时Kernel driver not installed (rc-1908) 错误的解决方法 网上的方法各种各样&#xff0c;结果绕山绕水一点用没有&#xff0c;就下面这句就行 sudo /Library/Application\ Support/VirtualBox/LaunchDaemons/VirtualBoxStartup.sh restart昨天更新了下系统&a…

ios开发之-继承的实现运用

// // main.m // 继承 ////#import <Foundation/Foundation.h> #import "Animal.h" #import "Cat.h" #import "Dog.h" #import "FeedMan.h"int main(int argc, const char * argv[]) {// Animal * animal [Animal new]; /…

查找字段 如何 过滤

dm.ADOTbBug 使用Filter 属性的话&#xff0c;不能包括 查找字段。 方法1 在过滤事件里 使用查找字段。 http://www.itdelphi.com/delphibbs/doc/2001/558361.htm 方法2 就是使用查找字段对应的KeyFields 为字段名。 比如查找字段是 部门名称&#xff0c;对应的数据集里KeyFiel…

python字符串去头尾_带你认识优秀的python代码

有一串长的字符串names "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI, CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"。要求&#xff1a;&#xff08;1&#xff09;过滤所有的名字&#xff0c;去掉每个名字左右的空格和…