一起来写索引器吧o(∩_∩)o

编写一个索引器通过下标来访问类中的数组的内容

一、首先我们应该先了解一下索引器这个东东

索引器其实就是一个非常特殊的属性,常规情况下索引器就是一个item属性。所以在类中如果写了一个索引器就不能再声明一个item属性。

那为什么索引器就包含一个item属性呢?让我们一起来看看反编译以后的索引器内部是怎么运行的。

从上面这幅图中我们可以看出IL语言中已经自动编译成了一个item属性。所以如果这时候再声明一个item字段的时候就会出现下面的错误

二、如何自己写一个索引器呢?

(1)首先写一个this属性参数用[index]来表示,用get属性来判断一下index的范围,如果范围不合理就抛出异常,如果合理就得到对应的索引值。

<span style="font-family:Microsoft YaHei;font-size:18px;">public string this[int index]
{
      get
     {
           if(index<0 || index>_name.length)
           {
                  throw new ArgumentException();
           }
           return _name[index];
     }
     set
     {
<span style="white-space:pre">	</span>_name[index]=value;
     }
}</span>

(2)然后再写一个count属性来记录数组的长度用于遍历

<span style="font-family:Microsoft YaHei;font-size:18px;">public int count
{
        get{return _name.Length;}
}</span>

这样我们就完成了一个索引器的创建

三、调用索引器

通过遍历就可以调用,上面这幅图就出现了我们想要的结果。

时间: 2025-01-12 11:02:06

一起来写索引器吧o(∩_∩)o的相关文章

C#索引器:在集合或数组中取出某一个元素 举例 _【转】

Garmmar: [访问修饰符] 数据类型 this[参数列表] { get { 获取索引器的内容 } set { 设置索引器的内容 } } Eg: 1 <span style="font-size:14px;">using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace IndexerUsing 6 { 7 class Photo 8 { 9 10 private

《Inside C#》笔记(六) 属性、数组、索引器

一 属性 a) 属性可用于隐藏类的内部成员,对外提供可控的存取接口.属性相当于有些语言的getter.setter方法,只是使用起来更加方便一点,而且查看对应的IL码可以看到,属性的本质也确实是方法. b) 通过只提供get,可以让属性只读.只写属性也可以,但没有用过. c) 属性除了用来控制对类成员的访问外,还可以在get或set的时候通过编码进行一些附加的动作. d) 属性也可以被继承.重写. 二 数组 a) 在C#中,所有数组都继承自System.Array类.数组也是对象,所以声明的数组

C#入门--索引器

C#入门--索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 索引器概述 索引器使得对象可按照与数组相似的方法进行索引. get 访问器返回值.set 访问器分配值. this 关键字用于定义索引器. value 关键字用于定义由 set 索引器分配的值. 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制. 索引器可被重载. 索引器可以有多个形参,例如当访问二维数组时. class SampleCollection<T

C#中常用的索引器

之前了解过索引器,当时还把索引器和属性给记混了, 以为索引器就是属性,下面写下索引器和属性的区别,以及怎么使用索引器 先说明一点,这里的索引器和数据库中的索引不一样,虽然都是找元素. 索引器和属性的区别: 属性是以名称来标识,而索引器是以函数的形式来标识(但是索引器不能完全理解为函数): 索引器可以被重载,而属性没有重载这一说法: 索引器不能声明为static,而属性可以: 还有一点就是索引很像数组,它允许一个对象可以像数组一样被中括号 [] 索引,但是和数组有区别,具体有: 数组的角标只能是数

010.里式转换、命名空间、字段属性、索引器

1.is asis:判断对象和类型的兼容 兼容---true 不兼容---false 子类兼容父类 子类对象 is 父类类型 --true对象 is 类型 (对象为此类型的对象 对象为此类型的子类的对象 --true)public class Person{}public class Student:Person{} Person per=new Person();Student stu=new Student();Person person=new Student();返回true:per i

c#里面的索引器注意

1.特此说明,下面代码是从完整部分复制了部分,未必能直接拷贝执行. 2.索引器里注意  1)如果没有设置数组保存,不能连续访问per2[0],per[1],因为里面的比如 Name是被替换的. 2)我们创建数组保存,需要 创建空间,我们可以 string[] ArrName=new string[10] ; 也可以在这里分配空间也可以写个构造方法,动态分配空间,如下面代码. 3.索引器里另外灵活运用例子,将索引号不同,给对象不同字段赋值. public string this [int inde

C# get 、set、索引器

get 与 set C#类的属性有公有属性(public)和私有属性(private).如果直接将一个属性声明为public,则该类的任意实例可以随意获取或修改该属性的值,很不安全..NET Framework中,我们使用get关键字来获取一个公有属性的值,而使用set来设置一个公有属性的值.而在get或set中,可以编写代码来控制对属性值的获取和修改. public class SplaybowClass { //.net2.0及1.1版本设置属性的方式 private String name

调试器开发实例_调试器框架设计

作为一个安全开发人员离不开调试器,它可以动态显示程序的执行过程,对于解决程序问题有极大的帮助,这些文章记录了我开发一个调试器雏形的过程,希望对你有帮助.或许我写的代码很拙劣,还请大家多多见谅! 我们使用  Microsoft Visual Studio 6.0 VC编译器来作为我们的开发工具想对一个程序进行调试,首先要做的当然是启动这个程序,这要使用CreateProcess这个Windows API来完成.例如: 1 // LilisiDebug.cpp : Defines the entry

C#中索引器的作用和实现。

官方描述:索引器允许类或结构的实例就像数组一样进行索引.索引器形态类似于,不同之处在于它们的取值函数采用参数. 这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象有些资源等,能让类具有类似数组行为也是非常有用的. 大致结构: <modifier><return type> this [argument list] { get{//读} set{//写} } 其中: modifier:修饰符,如:public,private,protected this