26索引器--[Asp.Net]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace demo5
{
    public partial class suoyin : System.Web.UI.Page
    {
        //创建一个类,作为容器
        public class arr
        {
            //申明一个字符串类型的数组
            private string[] myarr;

            private int szmax;
            //利用构造函数初始化数组
            public arr(int size)
            {
                //初始化重载数组的长度
                szmax = size;
                //将数组大小初始化为传进来的值长度
                myarr = new string[size];
                for (int i = 0; i < size; i++)
                {
                    myarr[i] = "空值";
                }
            }

            //构造索引器
            public string this[int j]//j是位置参数,参数类型是数组元素的位置,整型的。
            {
                get
                {
                    return myarr[j];//构造属性,get,set控制元素的读写。
                }
                set {
                    myarr[j] = value;
                }
            }

            public string this[string val]
            {
                get
                {//声明一个整型的变量,用于记录当前数组元素和传来值
                    int count = 0;
                    //循环
                    for (int i = 0; i < szmax; i++)
                    {//如果数组该项的值=传进来的值
                        if (myarr[i] == val)
                        {//count就要自增1
                            count++;
                        }
                    }
                    return count.ToString();
                }
                set {

                    for (int i = 0; i < szmax; i++)
                    {//如果数组该项的值=传进来的值
                        if (myarr[i] == val)
                        {//count就要自增1
                            myarr[i]=value;
                        }
                    }
                }
            }

        }

        //索引器例题

        protected void Page_Load(object sender, EventArgs e)
        {
            int size = 15;
            arr WRITE = new arr(size);
            WRITE[1] = "天轰穿";
            WRITE[2] = ".NET";
            WRITE[3] = "系列教程";

            for (int i = 0; i < size; i++)
            {
                Response.Write(WRITE[i]+"<br>");

            }

            Response.Write("<p>" +WRITE ["空值"]+"</p>");
            WRITE["空值"] = "抽只烟先...";
            for (int i = 0; i < size; i++)
            {
                Response.Write(WRITE[i] + "<br>");
            }
        }
    }
}

结果:

索引器定义:

  在一个类的内部,可以按照你的意愿来管理一组数据的集合。这些对象可以是类成员的有限集合,也可以是另外一个数组,或者是一些复杂的数据结构。

特别之处:

  在不少程序语言中,通常都是使用整数作为下标来访问作为数组元素的,但C#的索引指示器不仅能够做到这一点,而且还能够更进一步。 定义索引指示器时,可以带有多个参数,每个参数的类型可以不同。添加的参数由逗号隔开,同方法中的的参数表一样。索引指示器的合法的参数类型包括:整型,枚举类型和字符串。另外,索引指示器也可以被重载。在下面清单,我们修改了前面的程序,以便用来重载索引指示器 ,从而可以接受不同类型的参数

个人感受:

  感觉似懂非懂,囫囵吞枣吧。

时间: 2024-07-29 03:43:06

26索引器--[Asp.Net]的相关文章

Asp.Net中索引器的用法

索引器定义类似于属性,但其功能与属性并不相同.索引器提供一种特殊的方法编写get和set访问器.属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员. 一.索引器特性 1.get 访问器返回值.set 访问器分配值.2.this 关键字用于定义索引器. 3.value 关键字用于定义由 set 索引器分配的值.4.索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制. 5.索引器可被重载.6.索引器可以有多个形参,例如当访问二维数组时.7.索引器使得对象可按照与

索引器实现

索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的. 索引器和数组比较: (1)索引器的索引值(Index)类型不受限制 (2)索引器允许重载 (3)索引器不是一个变量 索引器和属性的不同点 (1)属性以名称来标识,索引器以函数形式标识 (2)索引器可以被重载,属性不可以 (3)索引器不能声明为static,属性可以 代码实现: 1 //普通索引器 2 public class SimpleClass 3 { 4 string[] arr

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类实

C#语言进阶——3.C# 的索引器

简述:索引器为c#程序语言中类的一种成员,它使得对象可以像数组一样被索引,使程序看起来更直观,更容易编写. 1.C# 索引器的语法:介绍 C# 语言中的索引器的语法,如何建立一个索引器,以及索引器在语义上的正确使用. 1 class Program 2 { 3 4 private const string FILE_NAME = "Test.txt"; //文件名 5 static void Main(string[] args) 6 { 7 var names = new Index

索引器的真面目

今天在一个类中定义了一个索引器,但是再定义一个叫Item的属性的时候发现编译器报错: 1 namespace Test 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Person p = new Person(); 8 p["name"] = "hello"; 9 Console.WriteLine(p[3]); 10 Console.WriteLine(p["name&qu

this关键字和索引器

一.this关键字 在C#中,this关键字有以下3种常见的用法: 1.用在类的属性.实例方法或实例构造方法中,区分成员名和本地变量(或参数).下面的示例声明一个名为Myclass的类,类中包括一个实例字段myVal和一个实例构造函数,该构造函数带一个名为myVal的参数,在方法中,通过this可以在语义上区分成员名myVal和参数名myVal.(注意:在实际编程中是不建议参数名和字段名相同的,这样做降低了代码的易读性,这里只是为了说明this关键字的用法而已). 1 class MyClass

C# 索引器,实现IEnumerable接口的GetEnumerator()方法

当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [修饰符] 数据类型 this[索引类型 index] 以下是代码 1 /// <summary> 2 /// 单元格 3 /// </summary> 4 public class Cell 5 { 6 /// <summary> 7 /// Value 8 /// <

面向对象基础——索引器

C#中的string是可以通过索引器来访问对象中的字符,但却不能修改字符的值. 我们来看string中关于索引器的定义,如下图. 上图中索引器如同属性一样,具有get方法,却没有set方法,所以这就是为什么C#中的string类型的变量都是只读的. 现在让我们来编写属于自己的索引器: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Test test = new Test(); 6 Console.WriteLine("te