索引器实现

索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。

索引器和数组比较:

(1)索引器的索引值(Index)类型不受限制

(2)索引器允许重载

(3)索引器不是一个变量

索引器和属性的不同点

(1)属性以名称来标识,索引器以函数形式标识

(2)索引器可以被重载,属性不可以

(3)索引器不能声明为static,属性可以

代码实现:

  1     //普通索引器
  2     public class SimpleClass
  3     {
  4         string[] arr = new string[2];
  5
  6         public string this[int index]
  7         {
  8             get
  9             {
 10                 if (index < 2)
 11                     return arr[index];
 12                 else
 13                     return null;
 14             }
 15
 16             set
 17             {
 18                 if (index < 2)
 19                     arr[index] = value;
 20             }
 21         }
 22     }
 23
 24     //字符串下标索引器
 25     public class StrIndex
 26     {
 27         Hashtable ht = new Hashtable();
 28
 29         public string this[string index]
 30         {
 31             get { return ht[index].ToString(); }
 32             set { ht.Add(index, value) }
 33         }
 34     }
 35
 36     //索引器重载
 37     public class OverrideIndex
 38     {
 39         Hashtable ht = new Hashtable();
 40
 41         public string this[int key]
 42         {
 43             get { return ht[key].ToString(); }
 44             set { ht.Add(key, value); }
 45         }
 46
 47         public int this[string val]
 48         {
 49             get
 50             {
 51                 foreach (DictionaryEntry entry in ht)
 52                 {
 53                     if (entry.Value == val)
 54                         return Convert.ToInt32(entry.Key);
 55                 }
 56
 57                 return -1;
 58             }
 59
 60             set
 61             {
 62                 ht.Add(value, val);
 63             }
 64         }
 65     }
 66
 67     //多参索引器
 68     public class MultiParamIndex
 69     {
 70         ArrayList list;
 71         public MultiParamIndex()
 72         {
 73             list = new ArrayList();
 74         }
 75
 76         //根据Id和Name来获取Department
 77         public string this[int id, string name]
 78         {
 79             get
 80             {
 81                 foreach (Employee em in list)
 82                 {
 83                     if (em.Id == id && em.Name == name)
 84                         return em.Department;
 85                 }
 86                 return null;
 87             }
 88
 89             set
 90             {
 91                 list.Add(new Employee(name,id,value));
 92             }
 93         }
 94
 95         //根据Id查找员工实体
 96         public Employee this[int id]
 97         {
 98             get
 99             {
100                 foreach (Employee em in list)
101                 {
102                     if (em.Id == id)
103                         return em;
104                 }
105                 return null;
106             }
107         }
108
109         //...
110     }
111
112     //员工信息实体
113     public class Employee
114     {
115         public string Name { get; set; }
116         public int Id { get; set; }
117         public string Department { get; set; }
118
119         public Employee(string name, int id, string department)
120         {
121             Name = name;
122             Id = id;
123             Department = department;
124         }
125     }
时间: 2024-12-25 23:20:05

索引器实现的相关文章

C#之索引器

实际中不使用这个东西,只做了解 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 索引器 { class Program { static void Main(string[] args) { person p = new person(); p[0] = 1; p[1] = 2; p[2] =

C# 索引器

索引器允许累或结构的实例像数组一样进行索引. 当你定义一个索引器时,该类的行为就会像一个虚拟数组,你可以使用数组访问运算符([]) 来访问该类的实例. 以为所引起语法如下: element-type this[int index] { // get 访问器 get { // 返回 index 指定的值 } // set 访问器 set { // 设置 index 指定的值 } } //示例代码如下: class SampleCollection<T> { private T[] arr = n

索引器的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 索引器的使用 { class Program { static void Main(string[] args) { //int[] nums = { 1, 2, 3, 4, 5 }; //Console.WriteLine(nums[2]); P

索引器(C# 编程指南)

索引器(C# 编程指南) Visual Studio 2015 其他版本 索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的取值函数采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 取值函数方法(作为分配和检索值的方法). Program 类创建了此类的一个实例,用于存储字符串. C# class SampleCollection<T> { // Declare an array to store the data elem

18._4索引器概述及声明

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _18._4索引器概述及声明 { public class Clerk { private string name; public string Name { get { return name; } set { name = value; } }

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

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

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

接口、索引器、Foreach的本质(学习笔记)

接口 什么是接口? 接口代表一种能力,和抽象类类似但比抽象类的抽象程度更高! 接口的定义: 1 public interface IEat//定义一个接口 2 { 3 void Eat(string food);//为该接口定义一种能力 4 } 接口的定义 从上边的例子中我们可以看到,接口中的方法是没有方法体的甚至连访问修饰符都没有.而且在接口中只能有方法.属性.索引器及事件! 接口的使用: 1 public class Dog:IEat //Dog类实现IEat接口 2 { 3 //Dog类实

public animal this[int index]|索引器的使用

学习如何使用索引器,索引器的使用是public 类型 this[int index]{get{};set{}} ,访问通过类的实例(对象)加[i], 例如animal[i],就像访问数组一样,其实就是类的数组访问的使用书写. 使用详情请看msdn. 例子如下: class IndexerClass { private int[] arr = new int[100]; public int this[int index] // Indexer declaration { get { // Che