C#基础之索引器(Indexer)
C#基础之索引器(Indexer)
索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。 简单的索引器实例: class Program
{ static void Main(string[] args) { IndexClass a = new IndexClass(); a[0] = "张三"; a[1] = "李四"; a[2] = "王五"; Console.WriteLine("a[0]=" + a[0]); Console.WriteLine("a[1]=" + a[1]); Console.WriteLine("a[2]=" + a[2]); Console.ReadKey(); } } class IndexClass { private string[] name = new string[10]; public string this[int index] { get { return name[index]; } set { this.name[index] = value; } } } 索引器与数组的比较: 索引器的索引值不受类型限制。用来访问数组的索引值一定是整数,而索引器可以是其他类型的索引值。 索引器允许重载,一个类可以有多个索引器。 索引器不是一个变量没有直接对应的数据存储地方。索引器有get和set访问器。 索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。 简单的索引器实例: 索引器与属性的比较: 标示方式:属性以名称来标识,索引器以函数签名来标识。 索引器可以被重载。属性则不可以被重载。 属性可以为静态的,索引器属于实例成员,不能被声明为static 多参数索引器实例: using System;
using System.Collections.Generic; using System.Text; using System.Collections; namespace Study { class Program { static void Main(string[] args) { ScoreIndex s = new ScoreIndex(); s["张三", 1] = 90; s["张三", 2] = 100; s["张三", 3] = 80; s["李四", 1] = 60; s["李四", 2] = 70; s["李四", 3] = 50; Console.WriteLine("张三课程编号为1的成绩为:" + s["张三",1]); Console.WriteLine("张三的所有成绩为:"); ArrayList temp; temp = s["张三"]; foreach (IndexClass b in temp) { Console.WriteLine("姓名:" + b.Name + "课程编号:" + b.CourseID + "分数:" + b.Score); } Console.ReadKey(); } } class IndexClass { private string _name; private int _courseid; private int _score; public IndexClass(string _name, int _courseid, int _score) { this._name = _name; this._courseid = _courseid; this._score = _score; } public string Name { get { return _name; } set { this._name = value; } } public int CourseID { get { return _courseid; } set { this._courseid = value; } } public int Score { get { return _score; } set { this._score = value; } } } class ScoreIndex { private ArrayList arr; public ScoreIndex() { arr = new ArrayList(); } public int this[string _name, int _courseid] { get { foreach (IndexClass a in arr) { if (a.Name == _name && a.CourseID == _courseid) { return a.Score; } } return -1; } set { arr.Add(new IndexClass(_name, _courseid, value)); //arr["张三",1]=90 } } //重载索引器 public ArrayList this[string _name] { get { ArrayList temp = new ArrayList(); foreach (IndexClass b in arr) { if (b.Name == _name) { temp.Add(b); } } return temp; } } } }
所有索引器都使用this关键词来取代方法名。Class或Struct只允许定义一个索引器,而且总是命名为this。
参考文档:
学习C#.NET基础知识(学习重点请下载附件) C# 对象多态性(OOP基础) C# INI文件操作类(IniFileAPI) C# 注册系统热键,快捷键 C# 计算字符串公式得出数值.(CalculateExpression) C#.Net显示今天的农历日期 通过反射技术创建窗体实例然后给控件赋值(C#) 模拟搜索引擎中文自动分词算法精华(CSFramework特别提供C#源码) C#推送链接URL到百度搜索资源平台提高收录量 C#主动POST推送URL链接到百度站长平台(支持提交、更新和删除URL链接) C#使用StreamWriter在大文本文件末尾添加一行内容 模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#) C# OleDbConnection读取加装Excel2003(.xls),Excel2007(.xlsx)文件 C#程序判断DEBUG测试环境和RELEASE正式环境 CSFramework模拟百度搜索引擎自动语义分析分词算法(C#)
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |