[转载]C#索引器
来源:互联网 发布:java加大数据 编辑:程序博客网 时间:2024/06/06 07:31
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["王五"]); }}
多索引器
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); } }}
0 0
- [转载]C#索引器
- C#索引器(转载)
- [转载]C# WinForm开发系列 - 文章索引
- C#索引器
- C#索引器
- C#索引器
- C#中的索引器
- C#索引器
- C# 索引器
- C#索引器
- C#索引器
- C# 索引器
- C#索引器
- C#索引器
- C#索引器
- C#索引器
- c#属性 索引器
- C#的索引器
- 软件重构
- Loadrunner接口测试基本操作方法
- Google Analytics单页面应用url地址无法监听解决方案
- java中StringTokenizer类简读
- DNS服务配置
- [转载]C#索引器
- cookie和session的区别,简单理解
- 图书馆态势感知模型
- VS2010编译是出现mt.exe找不到的解决方案
- 蓝桥杯 ALGO-150 算法训练 6-1 递归求二项式系数值
- Pie HDU - 1969
- iOSCALayer简介
- 多文件修改编码
- tensorflow data reading (2)