1、C#索引器C#索引器详解索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。简单的索引器实例:class Program static void Main(string args) IndexClass a = new IndexClass(); a0 = 张三; a1 = 李四; a2 = 王五; Console.WriteLine(a0= + a0); Console.WriteLine(a1= + a1); Console.WriteLine(a2= + a2); Console.ReadKey(); class In
2、dexClass private string name = new string10; public string thisint index get return nameindex; set this.nameindex = value; 索引器与数组的比较:索引器的索引值不受类型限制。用来访问数组的索引值一定是整数,而索引器可以是其他类型的索引值。索引器允许重载,一个类可以有多个索引器。索引器不是一个变量没有直接对应的数据存储地方。索引器有get和set访问器。索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。简单
3、的索引器实例:索引器与属性的比较:标示方式:属性以名称来标识,索引器以函数签名来标识。索引器可以被重载。属性则不可以被重载。属性可以为静态的,索引器属于实例成员,不能被声明为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张三
4、, 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
5、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
6、 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 thisstring _name, int _courseid get foreach (IndexClass a in arr) if (a.Name = _name & a.CourseID = _courseid) return a.
7、Score; return -1; set arr.Add(new IndexClass(_name, _courseid, value); /arr张三,1=90 /重载索引器 public ArrayList thisstring _name get ArrayList temp = new ArrayList(); foreach (IndexClass b in arr) if (b.Name = _name) temp.Add(b); return temp; 备注:所有索引器都使用this关键词来取代方法名。Class或Struct只允许定义一个索引器,而且总是命名为this。索引
8、器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。get 访问器返回值。set 访问器分配值。this 关键字用于定义索引器。value 关键字用于定义由 set 索引器分配的值。索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。索引器可被重载。索引器可以有多个形参,例如当访问二维数组时。索引器可以使用百数值下标,而数组只能使用整数下标:如下列定义一个String下标的索引器public int this string name .属性和索引器属性和索引器之间有好些差别:类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器
9、都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。属性可以是static(静态的)而索引器则必须是实例成员。使用索引器的优点分类:C#2012-02-26 20:55219人阅读评论(0)收藏举报stringinterface优化工具c/可容纳100个整数的整数集 private long arr = new long100; /声明索引器 public long thisint index get /检查索引范围 if (index 0 | index = 100) return 0; else return arrindex; set if (!(inde
10、x 0 | index = 0) arrindex = value; 这个例子就能看出好处来避免了一个异常索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串但是索引器的用处也是有的,比如数组下标超出范围的异常,当合理的使用索引器可以极大的提升数组或者集合的稳定性还有就是索引优化,跟限制插入比如a,B,C,d我们不知道数组中有多少个,但是我们把a不让他输入到数组中合理的避免了很多不想要的数据索引器是高级应用的中一个重要组成部分,其实应用也没啥高级低级,不过这个玩意用好了,确实是好东西回复pazza(375650524) 20:17:08索引器优化 下面说的确实
11、有点不明白,上面说的明白,我再查查资料其实你只要考虑到一点,就是下标异常,跟数据过滤就足以让我们使用索引器了我们的索引器是构造一个安全稳定的数组或者集合的空间,集合或者数组只是一个容器,他没办法进行过滤操作,我们要插入的数据也不能每次都保证是正确的,那么我们就需要在之前去判断浪费很多逻辑资源在代码中,而索引器,在构造的时候检查,完全可以吧用for循环过滤写成这个样子public long thisint index get /检查索引范围 if (index 0 | index = 100) return 0; if(arrindex=14) retrun 16; else return ar
12、rindex; set if (!(index 0 | index = 0) arrindex = value; 这是一种写法,这个样子的好处是,只要我们的索引器中会出现14,那么真实数据就会替换为16针对很多过滤的数据就很有用处比如我们日常开发中总是有些要替换掉的关键字,什么反党,反政府啥的,如果我们一篇文章为1000个字,那么我们接受的时候就需要过滤所有的字去替换,这个先不说代码的复杂度,其实只需要一个索引器就搞定了不过写法到不是这么简单 我记得搭配的还有一个工具,但是我忘了索引器你可以这么理解,咱们哈希表是底层,那么在我们插入的数据计入哈希表的时候,是不是也是一条一条进入的,索引器不带循
13、环过滤,但是他只是匹配你插入的东西,比如咱们插入1,2,3,4, 这个样子if(xx=3) retrun arrxx=6;过程是插到3的时候索引就会过滤掉6而且索引器还可以写在接口中,这个东西你可以不用,但是用还是能用的public interface IAddressstring thisint indexget;set;string Addressget;set;string Answer();额,怎么说呢,话说常用的方式多数是泛型集合但是针对某些东西的时候,索引还是可以用的/C# 类中索引器的使用分类:C#2012-02-25 18:4575人阅读评论(0)收藏举报c#索引器(Index
14、er)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 运算符访问类的成员。(当然高级的应用还有很多,比如说可以把数组通过索引器映射出去等等) 本文只是简单演示一下索引器的概念和基本的使用方法:请看代码,下面是类的定义,中间包含了一个索引器定义类的定义publicclassPerson/定义两个字段信息privatestringname;privatestringpassword;/定义一个Name属性来操作name字段publ
15、icstringNamesetname=value;getreturnname;/定义一个Password属性来操作password字段publicstringPasswordsetpassword=value;getreturnpassword;/定义索引器,name字段的索引值为0,password字段的索引值为1publicstringthisintindexgetif(index=0)returnname;elseif(index=1)returnpassword;elsereturnnull;setif(index=0)name=value;elseif(index=1)passwo
16、rd=value;复制代码下面是使用索引器的方法:索引器使用protectedvoidPage_Load(objectsender,EventArgse)/声明并实例化这个类Personp=newPerson();/使用索引器的方式来给类的两个属性赋值p0=jarod;p1=123456,./;/使用类属性取得两个字段信息Label1.Text=p.Name+/+p.Password;复制代码 非常简单,在上面的类中我们把类的 name 字段映射的索引值为 0,而 password 字段映射的索引值为 1。有了这个映射就可以使用以下方式为类的 name 和 password 赋值了。p0=ja
17、rod;/设置name字段值p1=123456,./;/设置password字段值复制代码赋值后,就可以使用属性方法访问到刚刚给两个字段赋的值了。/C# 类中索引器的使用分类:C#2012-02-25 18:4577人阅读评论(0)收藏举报c#索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 运算符访问类的成员。(当然高级的应用还有很多,比如说可以把数组通过索引器映射出去等等) 本文只是简单演示一下索引器
18、的概念和基本的使用方法:请看代码,下面是类的定义,中间包含了一个索引器定义类的定义publicclassPerson/定义两个字段信息privatestringname;privatestringpassword;/定义一个Name属性来操作name字段publicstringNamesetname=value;getreturnname;/定义一个Password属性来操作password字段publicstringPasswordsetpassword=value;getreturnpassword;/定义索引器,name字段的索引值为0,password字段的索引值为1publicstringthisintindexgetif(index=0)returnname;elseif(index=1)returnpassword;elsereturnnull;setif(index=0)name=value;elseif(index=1)password=value;复制代码下面是使用索引器的方法:索引器使用protectedvoidPage_Load(objectsender,EventArgse)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1