温故而知新:类索引器

类索引器

 1 using System;
 2 using System.Collections.Generic;
 3 
 4 namespace Prototype
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             PersonContainer pc = new PersonContainer();
11             pc[1] = new Person() { No = 1, Age = 30, Name = "杨俊明" };
12             pc[2] = new Person() { No = 2, Age = 30, Name = "Mike" };
13 
14             Console.WriteLine(pc[1] + "\n" + pc[2] + "\n" + pc[3]);
15 
16             Console.WriteLine(pc["杨俊明"] + "\n" + pc["MIKE"] + "\n" + pc["NotExists"]);
17 
18             Console.Read();
19 
20         }        
21     }  
22 
23 
24     public class Person
25     {
26         public int No { set; get; }
27         public string Name { set; get; }
28         public int Age { set; get; }
29 
30         public override string ToString()
31         {
32             return string.Format("No:{0},Name:{1},Age:{2}", No, Name, Age);
33         }
34     }
35 
36     public class PersonContainer
37     {
38         Dictionary<int, Person> dics = new Dictionary<int, Person>();
39 
40         /// <summary>
41         /// 类索引器
42         /// </summary>
43         /// <param name="no"></param>
44         /// <returns></returns>
45         public Person this[int no]
46         {
47             get
48             {
49                 if (dics.ContainsKey(no))
50                 {
51                     return dics[no];
52                 }
53                 else
54                 {
55                     return null;
56                 }
57             }
58             set
59             {
60                 if (!dics.ContainsKey(no))
61                 {
62                     dics.Add(no, value);
63                 }
64                 else
65                 {
66                     dics[no] = value;
67                 }
68             }
69         }
70 
71         /// <summary>
72         /// 类索引器重载
73         /// </summary>
74         /// <param name="name"></param>
75         /// <returns></returns>
76         public Person this[string name]
77         {
78             //只读
79             get
80             {
81                 Person _person = null;
82                 foreach (Person _p in dics.Values)
83                 {
84                     if (string.Compare(_p.Name, name, true) == 0)
85                     {
86                         _person = _p;
87                         break;
88                     }
89                 }
90 
91                 return _person;
92             }
93         }
94     }
95 }
96 

 

时间: 2024-08-02 17:09:31

温故而知新:类索引器的相关文章

关于实现了索引器的类的反射问题

问题描述 假设类ClassA实现了一个索引器,在反射时调用GetProperties方法,则会多取到一个Item属性(若类本身包含一个Item属性,则在PropertyInfo数组中会有两个不同的Item属性),据查此Item属性是由索引器生成.但是现在有个问题,在反射中对索引器生成的那个Item属性进行取值或者赋值,就会出错,若我想将此Item对应PropertyInfo剔除,如何写判断?直接使用Name!="Item"的判断则会屏蔽自定义Item属性的情况 解决方案 解决方案二:

C#下的BitArray类:实现索引器和位操作

System.Collections命名空间下的BitArray相当于一个bool类型的数组bool[].MSDN用 BitArray做例子实现了一个索引器,今天研究了一下这个例子,对原来的实现做了一些改变 ,将>> 5操作变成了mod 32,敝人以为这样看起来会更直观. 代码如下: public class MyBitArray { private int[] m_Bits; private int m_Length; public MyBitArray(int length) { //Co

C#锐利体验之第八讲 索引器与操作符重载

索引 索引器 索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用.索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用.下面是典型的索引器的设计,我们在这里忽略了具体的实现. class MyClass{    public object this [int index]    {        get        {            // 取数据        }        set  

SEOer需要了解搜索引擎的索引器

一个合格的SEOer需要对搜索引擎的结构有一定的了解,这样在进行seo时可以做到心中有数,有条不紊,而不必拘泥于固定的优化方法和技巧.而此时要分析的索引器,它是搜索引擎结构中一个比较重要部分. 索引 器第对搜索引擎是比较重要的,比如:我们熟悉的百度新闻,它是"由机器每5分钟自动选取更新",比较具有实时性,并且数据量也是相当的大.此时索引器的算法对索引器的影响就显得十分突出了.因此有人说,一个搜索引擎的有效性在很大的程度上取决于索引器的质量(精确的说应该归功于索引器的索引算法). 下面我

概述C#中的索引器

索引 C#语言一个最令人感兴趣的地方就是类的索引器(indexer).简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类.显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的.本文就会引领你设置类来采用索引器.但是,首先让我们概述下属性这个概念以便了解些必要的背景知识. 属性 假如你曾经用VB6编写过程序,那么你应该很熟悉属性方法才对,所谓属性方法其实就是特殊的类成员,它实

使用C#索引器

索引器在语法上方便您创建 客户端应用程序可将其作为数组访问的类.结构或接口.索引器经常是在主要用 于封装内部集合或数组的类型中实现的.例如,假定具有一个名为TempRecord的 类,此类表示在24小时内的10个不同时间记录的华氏度.此类包含一个表示温度 的float类型的名为"temps"的数组和表示记录温度的日期的 DateTime.通过在此类中实现一个索引器,客户端可以通过floattemp=tr[4]而 不是floattemp=tr.temps[4]语法访问TempRecord

C#——运算符重载和索引器

       一.什么是运算符?        所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型.自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数.        下面是个小例子: namespace 运算符重载 { class Program { static

Silverlight 通过索引器绑定动态数据

转自http://www.cnblogs.com/forgetu/archive/2011/06/18/silverlight-binding-dynamic-object-anonymous-class.html 绑定动态数据是做 Silverlight 程序时经常会遇到的问题.本文介绍 Silverlight 通过绑定索引器实现绑定动态数据,即在设计时不知道数据的结构,如在设计时不知道要绑定的类有哪些属性. 绑定索引器是 Silverlight 4 新增的特性,这一特性使用我们可以在设计时不

这个用索引器怎么做

问题描述 定义一个照片类.属性:名称大小定义一个相册类.获取保存多个照片对象,获取相册当中的照片对象(获取所有,获取第几张,根据照片名称获取)并显示 解决方案 解决方案二:定义一个相册类照片类this[intindex]{return照片List[index];}解决方案三:publicclassPhoto{publicstringName={set;get;}publicintsize={set;get;}}publicclassAlbum{privatePhoto[]photos=newPh