`
wangdeshui
  • 浏览: 255710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#拾遗系列(4):索引器

阅读更多

1. 概述

索引器允许类或结构的实例就像数组一样进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。索引器经常是在主要用于封装内部集合或数组的类型中实现的。

例如,假定具有一个名为 TempRecord 的类,此类表示在 24 小时内的 10 个不同时间记录的华氏度。此类包含一个表示温度的 float 类型的名为“temps”的数组和表示记录温度的日期的 DateTime。通过在此类中实现一个索引器,客户端可以通过 float temp = tr[4] 而不是 float temp = tr.temps[4] 语法访问 TempRecord 实例中的温度。索引器表示法不仅简化了客户端应用程序的语法,还使其他开发人员能够更加直观地理解类及其用途。使用索引器可以用类似于数组的方式为对象建立索引。

get 访问器返回值。set 访问器分配值。this 关键字用于定义索引器。value 关键字用于定义由 set 索引器分配的值。

索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。索引器可被重载索引器可以有多个形参,例如当访问二维数组时。

2. 示例:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace NetTest

{    

    public class TestIndexClass

    {

        public void Test()

        {

            TempRecord tempRecord = new TempRecord();

            // Use the indexer's set accessor

            tempRecord[3] = 58.3F;

            tempRecord[5] = 60.1F;

 

            // Use the indexer's get accessor

            for (int i = 0; i < 10; i++)

            {

                // This example validates the input on the client side. You may

                // choose to validate it in the class that implements the indexer, and throw an

                // exception or return an error code in the case of invalid input.

                if (i < tempRecord.Length)

                {

                    System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]);

                }

                else

                {

                    System.Console.WriteLine("Index value of {0} is out of range", i);

                }

            }

 

            //Uncomment this code to see how the .NET Framework handles indexer exceptions

            //try

            //{

            //    System.Console.WriteLine("Element #{0} = {1}", tempRecord[tempRecord.Length]);

            //}

            //catch (System.ArgumentOutOfRangeException e)

            //{

            //    System.Console.WriteLine(e);

            //}

 

            DayCollection week = new DayCollection();

            System.Console.WriteLine(week["Fri"]);

            System.Console.WriteLine(week["Made-up Day"]);

 

        }

    }

 

 

    class TempRecord

    {

        // Array of temperature values

        private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F,

                                            61.3F, 65.9F, 62.1F, 59.2F, 57.5F };

        // Auto-Implemented Property

        System.DateTime date { get; set; }

        // To enable client code to validate input

        // when accessing your indexer.

        public int Length

        {

            get { return temps.Length; }

        }

        // Indexer declaration.

        // Input parameter is validated by client

        // code before being passed to the indexer.

        public float this[int index]

        {

            get

            {

                return temps[index];

            }

 

            set

            {

                temps[index] = value;

            }

        }

    }

 

 

 

    //C# 并不将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类索引器。

    //由于访问器可被重载,字符串和整数版本可以共存。

 

    class DayCollection

    {

        string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

 

        // This method finds the day or returns -1

        private int GetDay(string testDay)

        {

            int i = 0;

            foreach (string day in days)

            {

                if (day == testDay)

                {

                    return i;

                }

                i++;

            }

            return -1;

        }

 

        // The get accessor returns an integer for a given string

        public int this[string day]

        {

            get

            {

                return (GetDay(day));

            }

        }

    }

 

 

}

分享到:
评论

相关推荐

    c# 索引器三

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构的实例像数组一样被访问。索引器的使用使得数据集合可以轻松地通过一个特定的键(通常是整数或字符串)来访问其元素,而无需定义显式的get和set方法。在本篇...

    C# 类索引器源码

    在C#编程语言中,类索引器是一种特殊的方法,允许开发者通过索引来访问类的成员,就像操作数组或集合一样。索引器使得类能够模拟数组的行为,即便其内部数据结构并非数组。这种功能极大地提高了代码的可读性和易用性...

    C#=索引器的使用

    4. **自定义逻辑**:索引器可以包含自定义的验证逻辑,例如检查索引是否超出范围,或者根据索引执行特定操作。 三、索引器的类型和参数 索引器不仅可以接受整型参数,还可以接受其他类型,如字符串、自定义类型等...

    C#索引器适合初学者的C#索引器适合初学者的

    在C#编程语言中,索引器是一种特殊的方法,它允许我们像操作数组一样访问类或结构中的元素。索引器对于那些需要提供类似数组访问方式的自定义数据结构非常有用,比如字典、列表或其他集合。这个话题非常适合C#初学者...

    C#视频 索引器一

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构的实例通过一个类似于数组的语法来访问其内部的数据。索引器的概念引入,使得开发者可以自定义对象的访问方式,使得代码更加直观和简洁。在这个“C#视频 ...

    c# 索引器四

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构的实例像数组一样通过索引来访问其成员。索引器的概念是面向对象编程中的一个重要特性,尤其是在处理集合、列表或者其他需要通过键值访问的数据结构时非常...

    关于C#索引器

    C#中的索引器是一种特殊类型的成员,它允许对象像数组一样通过索引进行访问,但其实现方式更加灵活。索引器的概念是基于数组访问的便利性,但超越了数组的限制,允许使用自定义的数据结构和任意类型的索引来访问数据...

    龙天下整理c#索引器的例子

    在C#编程语言中,索引器是一种特殊的方法,它允许我们通过索引访问类或结构的实例,就像数组或集合一样。索引器使得数据访问更加直观和便捷,尤其适用于处理具有自然索引的数据集合。"龙天下整理c#索引器的例子"是一...

    C#快速NTFS硬盘文件索引

    本主题将深入探讨如何使用C#快速创建NTFS(New Technology File System)硬盘文件索引,这是一项重要的技术,可以帮助用户快速定位和访问大量文件。NTFS是Windows操作系统的主要文件系统,它提供了高级功能,如权限...

    C#索引器示例程序

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构体的实例像数组一样被访问,即使它们内部的数据存储结构并不是数组。索引器提供了方便的方式来通过一个特定的键(通常是整数或字符串)来访问对象的成员。...

    C# 索引器的一个简单例子,模仿数组

    在C#编程语言中,索引器是一种特殊的方法,它允许我们像操作数组一样通过索引来访问类中的数据。这个特性使得自定义类型能够提供类似于数组的访问方式,增加了代码的可读性和便利性。本篇文章将深入探讨C#中的索引器...

    C# 中对于 索引器的理解 一个实例

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构以类似数组的方式访问其成员。索引器的使用使得数据集合可以轻松地通过下标进行访问,就像处理数组或列表一样。这对于创建自定义数据结构,如矩阵、字典或...

    C#索引器的讲解(1)

    在这个“C#索引器的讲解(1)”中,我们将探讨索引器的基础知识,这是分四部分系列教程的第一部分。 首先,我们需要了解索引器的基本语法。在C#中,索引器通常定义为类或结构的实例成员,并且使用`this`关键字作为...

    索引器的定义 c# 适合初学者

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构的实例像数组一样通过索引进行访问。这对于处理数据集合尤其有用,比如数据库记录、数组或其他需要通过键值来查找元素的数据结构。索引器的概念是C#为提高...

    C#关于索引器的详解笔记

    4. **重载**:索引器可以被重载,即可以通过不同的参数列表来实现多个索引器方法。 5. **多维索引**:索引器可以支持多个参数,例如在访问二维数组时。 #### 五、使用示例 下面是一个简单的使用示例: ```csharp ...

    C#索引器的使用.zip

    4. **默认索引器**: C#中的`List&lt;T&gt;`和`Dictionary, TValue&gt;`等集合类已经提供了默认的整数索引器,但你也可以为这些类添加额外的索引器,以支持其他类型的访问方式。 5. **只读或只写索引器**: 你可以在索引器...

    c#中索引器的应用简单版

    在C#编程语言中,索引器是一种特殊的方法,它允许类或结构的实例像数组一样通过索引进行访问。索引器的概念是面向对象设计的一部分,为用户提供了一种直观的方式来访问集合或序列中的元素。在本文中,我们将深入探讨...

    c#_索引器详解C#经典教程

    4. 索引器与属性类似,都提供访问类中数据的方法,但索引器带有参数,而属性通常没有参数。 接下来,我们讨论索引器与属性的区别: 1. 标识方式:属性通过名称识别,如 `public string MyProperty { get; set; }`,...

    C#索引器详解,超经典

    C#索引器详解 索引器是C#的一个简单组件,它允许类或结构的实例像数组一样进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或...

    C#射击类游戏:龙之战(源码)

    开发语言:C# 参考网络上流传的《勇者斗恶龙》游戏源码制作的一个射击类游戏,借用了《勇者斗恶龙》的游戏界面及部分源码。 整个游戏框架已基本完成,源码中采用了一些设计模式,有精美的游戏画面和详尽的代码注释,...

Global site tag (gtag.js) - Google Analytics