用索引器简化的C#类型信息访问

简介:

“C#中的Indexer给人一种更’透彻’的感觉,集合类型就是集合类型,有自己专用但又最简洁的访问方式,而且同一类型可以有不同的索引访问方式。”

   --《设计模式_基于C#的工程化实现及扩展》

示例代码

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BangWorks.PractcalPattern.Concept.Inder
{
    public class SingleColumnCollection
    {
        //实现一个字符串数组,以便用索引器访问
        string[] Names = new string[] { "BangChen", "BangJiang", "Data" };

        //实现数字索引器
        public string this[int index]
        {
            get { return Names[index]; }
        }
        //实现字符串索引器
        public string[] this[string strIndex]
        {
            get
            {
                if ((Names == null) || (Names.Length <= 0)) return null;
                return Array.FindAll<string>(Names, delegate(string cadicate)
                {return cadicate.StartsWith(strIndex);});
            }

        }
    }
}
复制代码

单元测试

复制代码
/// <summary>
        ///Item 的测试
        ///</summary>
        [TestMethod()]
        public void ItemTest()
        {
            SingleColumnCollection target = new SingleColumnCollection(); // TODO: 初始化为适当的值
            int index = 0; // TODO: 初始化为适当的值
            string actual;
            actual = target[index];
            Assert.AreEqual( "BangChen",actual);
        }

        /// <summary>
        ///Item 的测试
        ///</summary>
        [TestMethod()]
        public void ItemTest1()
        {
            SingleColumnCollection target = new SingleColumnCollection(); // TODO: 初始化为适当的值
            string strIndex = "Bang"; // TODO: 初始化为适当的值
            string[] actual;
            actual = target[strIndex];
            Assert.AreEqual<int>(2,actual.Length);
        }
复制代码

小提示
在Vs中,输入indexer,再键入Tab键,可以利用vs自带indexer模板,创建自己的索引。


作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/archive/2013/03/17/2964075.html

目录
相关文章
|
5月前
|
编译器 C++
【C++11特性篇】新的类功能解读:新增加的[移动构造函数/移动赋值运算符重载]
【C++11特性篇】新的类功能解读:新增加的[移动构造函数/移动赋值运算符重载]
|
24天前
|
前端开发 JavaScript
怎样使用接口引用数据
怎样使用接口引用数据
|
API C#
C#反射与特性(三):反射类型的成员
C#反射与特性(三):反射类型的成员
252 0
|
2月前
|
编译器 程序员 数据安全/隐私保护
C++类成员解析:编译器如何识别和处理声明与定义(C++ 类的作用域以及查找顺序)
C++类成员解析:编译器如何识别和处理声明与定义(C++ 类的作用域以及查找顺序)
14 0
|
2月前
|
存储 C++
c++类和对象一对象特性一成员变量和成员函数分开存储
c++类和对象一对象特性一成员变量和成员函数分开存储
14 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
339 0
C#反射与特性(五):主类型成员操作
C++ 继承与派生中的赋值兼容规则问题探究
C++ 继承与派生中的赋值兼容规则问题探究
137 0
C++ 继承与派生中的赋值兼容规则问题探究
|
Java
使用java反射机制读取任意类内部细节
使用java反射机制读取任意类内部细节
116 0
|
存储 Kotlin
【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
131 0
|
C++
C++两个类互相引用,如何处理最好
C++两个类互相引用,如何处理最好
212 0