`
thecloud
  • 浏览: 953296 次
文章分类
社区版块
存档分类
最新评论

索引器indexer

 
阅读更多

一、索引器的基本概述

索引器定义类似于属性,但其功能与属性并不相同,可以看成是属性的增强版,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。

1、索引器的定义

定义的一般形式:

[修饰符] 数据类型this[索引类型 index]

{

get{//获得属性的代码}

set{ //设置属性的代码}

}

修饰符包括public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

this关键字用于定义索引器。this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。

数据类型是表示将要存取的数组或集合元素的类型。

索引类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串。

get访问器返回值。set访问器分配值。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get或set均不能省略;如果只读的,省略set访问器;如果是只写的,省略get访问器。

value关键字用于定义由 set 索引器分配的值。

索引器可被重载。

索引器可以有多个形参,例如当访问二维数组时。

举例:相册索引

usingSystem;
 
namespace索引器
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化相册
            Ablum Myablum1 = new Ablum(2);
           
            //实例化两张照片
            Photo first = newPhoto("XiaoHong");
            Photo second = newPhoto("XiaoMing");
           
            //将两张照片赋给相册
            Myablum1[0] = first;
            Myablum1[1] = second;
           
            //按序号查找
            Photo testPhotos = Myablum1[0];
           Console.WriteLine(testPhotos.Title);
           
            //按标题查找
            Photo testPhotos1 =Myablum1["XiaoMing"];
           Console.WriteLine(testPhotos1.Title);
        }
    }
    class Photo
    {
        private string PhotoTitle;
        public Photo()
        {
        }
        public Photo(string title)
        {
            PhotoTitle = title;
        }
        public string Title
        {
            get { return PhotoTitle; }
        }
    }
 
    //相册类
    class Ablum
    {
        //照片数组
        private Photo[] photos;
       
        //构造函数
        public Ablum()
        {
        }
       
        public Ablum(int Capacity)
        {
            photos = new Photo[Capacity];
        }
                
       //索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。          
                  //如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。
       
                 //按序号索引
        public Photo this[int index]
        {
            get {
                if (index < 0 || index >=photos.Length)
                {
                   Console.WriteLine("索引有问题");
                    return null;
                }
                return photos[index];
            }
            set {
                if (index < 0 || index >=photos.Length)
                {
                   Console.WriteLine("索引有问题");
                    return;
                }
                photos[index] = value;
            }
        }
 
        //按标题索引
        public Photo this[string title]
        {
            get {
                foreach (Photo p in photos)
                {
                    if (p.Title == title)
                        return p;
                }
               Console.WriteLine("找不到");
                return null;
            }
        }
       
    }
}
 


2、另外,在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。

例如:

publicinterface IAddress
 
{
 
stringthis[int index]{get;set;}
 
stringAddress{get;set;}
 
stringAnswer();
 
}


表示所声明的接口IAddress包含3个成员:一个索引器、一个属性和一个方法,其中,索引器是可读写的。

一般示例:

// Indexeron an interface:
 
publicinterface ISomeInterface
 
{
 
    // Indexer declaration:
 
    int this[int index]
 
    {
 
        get;
 
        set;
 
    }
 
}
 
 
 
//Implementing the interface.
 
classIndexerClass : ISomeInterface
 
{
 
    private int[] arr = new int[100];
 
    public int this[int index]   // indexer declaration
 
    {
 
        get
 
        {
 
            // Check the index limits.
 
            if (index < 0 || index >=100)
 
            {
 
                return 0;
 
            }
 
            else
 
            {
 
                return arr[index];
 
            }
 
        }
 
        set
 
        {
 
            if (!(index < 0 || index >=100))
 
            {
 
                arr[index] = value;
 
            }
 
        }
 
    }
 
}
 
 
 
classMainClass
 
{
 
    static void Main()
 
    {
 
        IndexerClass test = new IndexerClass();
 
        // Call the indexer to initialize theelements #2 and #5.
 
        test[2] = 4;
 
        test[5] = 32;
 
        for (int i = 0; i <= 10; i++)
 
        {
 
           System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
 
        }
 
    }
 
}
 


3、索引器和属性的区别

属性

索引器

允许调用方法,如同它们是公共数据成员。

允许调用对象上的方法,如同对象是一个数组。

可通过简单的名称进行访问。

可通过索引器进行访问。

可以为静态成员或实例成员。

必须为实例成员。

属性的 get访问器没有参数。

索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。

除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。

分享到:
评论

相关推荐

    indexer:在 Java 中测试 fs 索引器

    描述索引器库是一种用于对文件进行后台索引以供进一步搜索的服务。...建筑学索引器Indexer服务对用户隐藏了库的内部结构。 在内部,它启动IndexManagerService和FSWatcherService 服务。FSWatcherService FSWat

    浅析C# 索引器(Indexer)

    C# 索引器(Indexer) C# 索引器(Indexer)是C# 语言中一个强大的功能,它允许一个对象可以像数组一样被索引。索引器的行为声明在某种程度上类似于属性(property),但索引器返回或设置对象实例的一个特定值,而...

    高性能网页索引器 论文

    ### 高性能网页索引器JU_Indexer的实现与优化 #### 一、系统架构与设计理念 **高性能网页索引器JU_Indexer**,作为吉林大学计算机科学与技术学院的一项研究成果,专注于解决网络搜索引擎核心组件——网页索引器的...

    indexer4j-Java的简单全文索引和检索库

    `indexer4j`可能提供了内置的分词器,或者支持接入其他第三方分词库,如IK Analyzer、Smart Chinese Analyzer等,以适应不同的语言和文本格式。 2. **建立索引**:处理后的文本会被转化为索引结构,这个过程通常...

    C#中索引器的概述

    C#语言一个最令人感兴趣的地方就是类的索引器(indexer)。简单说来,所谓索引器就是一类特殊的属性, 通过它们你就可以像引用数组一样引用自己的类。显然,这一功能在创建集合类的场合特别有用, 而在其他某些情况...

    splunk indexer

    本文档主要讲述Splunk 5.0版本中关于Indexer(索引器)和集群的部分,包括索引器的工作原理、如何管理索引器以及如何在分布式部署中使用索引器、索引的管理、存储配置、备份与归档、集群和索引复制的概述和配置。...

    new-index:新 gem 索引格式的原型和文档

    原型宝石索引器 indexer.rb这将从当前服务器中提取规格,然后构建建议格式的完整示例。 example_*.rb这些是示例阅读器程序。 如您所见,read_versions.rb 在 1.9+ 下具有与 read_marshal.rb 相当的性能。 example_...

    folder-indexer:Java Lucene 文件夹索引器

    介绍这是一个java文件夹索引器。 它基于 Lucene 5.1.0。 它索引一个文件夹,然后打开一个端口,您可以在该端口上进行连接和搜索。建造git clone https://github.com/cosminadrianpopescu/folder-indexer cd folder-...

    hbase-indexer

    **HBase-Indexer** 是一个工具,它允许用户通过Apache Solr来高效地对HBase中的数据进行索引和搜索。HBase是基于Google Bigtable设计的一个分布式、面向列的NoSQL数据库,适合处理海量半结构化或非结构化数据。而...

    高性能网页索引器JU_Indexer 的实现 (2006年)

    高性能网页索引器JU_Indexer 用倒排索引表存储网页索引数据,以多线程并行的方式对网页建立索引数据,采用经过优化的检索算法实现用户的查询。首先给出了JU_Indexer的系统框架,然后描述了索引数据在JU_Indexer中的...

    c# 索引器

    在`indexer.cs`文件中,可能包含了一个示例类,该类定义了索引器。下面是一个简单的索引器示例: ```csharp public class MyCollection { private int[] elements; public MyCollection(int size) { elements ...

    谈谈c#中的索引器

    索引器(Indexer) 允许类中的对象可以像数组那样方便、直观的被引用。当为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。 索引器可以有参数列表,且只能作用在实例对象上,而不能在...

    search-indexer-algolia:基本搜索索引器,用于收集记录并将其添加到阿尔戈利亚搜索索引中

    搜索索引器算法 基本搜索索引器,用于收集记录并将其添加到阿尔戈利亚搜索索引中 安装 使用安装: $ npm install --save search-indexer-algolia 小心! SECRET_KEY已更改为API_KEY以反映 api的命名约定。 SECRET...

    Directory Indexer:您的网站的简单文件索引器-开源

    "Directory Indexer" 是一个开源项目,用于将网站的根目录中的文件系统组织成一个易于浏览的索引。这个工具特别适用于那些希望提供一个简洁方式来访问和展示其服务器上静态资源的用户,比如个人网站或者小型项目站点...

    nginx-indexer:自定义Nginx索引器

    Nginx索引器由Tuxy编码Nginx Indexer用HTML / CSS编码,并使用PNG 16x16图标。 ngx_http_addition_module才能正常工作。 待办事项:使用有机的devicons并添加深色样式。配置Nginx server { listen 80; server_name ...

    C#索引器简单实例代码

    在C#编程语言中,索引器(Indexer)是一种特殊的方法,它允许对象像数组一样通过索引来访问其成员。索引器使得类可以模拟数组或集合的行为,使用户能够使用自定义的键来访问类中的数据。在提供的代码实例中,`Fruit`...

    图协议索引器组件和基础设施_TypeScript_HCL_下载.zip

    "indexer-main"可能是项目的主要源代码或配置文件,它包含了图协议索引器的核心逻辑。这部分可能包括图数据的导入、索引构建、查询优化和结果返回等功能。TypeScript代码会定义这些功能,而HCL配置文件则会指定如何...

    bai-indexer:为您的 BAM 索引 (BAI) 建立索引

    bai-indexer 为您的 BAM 索引 (BAI) 构建索引。背景是一种常见的文件格式,用于存储来自基因测序机的对齐读数。 这些文件可能会变得很大(100+ GB),... 通过加载 BAM 索引,查看器只能加载它实际需要的 BAM 索引的小

    indexer:一个Java程序,可以根据索引器在读取和重新读取分页的厨房时所做的注释来编译书籍的索引

    索引器 一个Java程序,它可以根据索引器在阅读和重新阅读分页厨房时的注释中为书的索引编制索引。 程序从命令行上指定的文本文件中读取索引器的注释,编译索引,然后将其写到标准输出(System.out)中。 准备输入...

Global site tag (gtag.js) - Google Analytics