您的位置:首页 > 职场人生

黑马程序员之C#学习笔记:C#索引器与属性的区别、索引器的具体使用

2012-11-07 21:32 681 查看
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

C#中索引器和属性类似,但也有一些区别:

a、 属性可以调用方法就如同他们是公共数据成员,而索引器可以调用对象上的方法,如同对象是一个数组。

b、 属性可以通过简单的名称访问, 而索引器需要通过索引器访问。

c、 属性可以为静态成员或者实例成员,而索引器必须是实例成员。

d、 属性的get访问器没有参数, 而索引器上的get访问器具有与索引器相同的形参表。

e、 属性的set访问器包含隐式value参数,而对于索引器,除了value参数外,索引器的set访问器还具有与索引器相同的形参表。

索引器使得对象可按照与数组相似的方法进行索引,索引器可被重载,当访问二维数组时可以有多个形参;索引器不必根据整数值进行索引,由你决定如何定义特定的查找机制;要声明类或结构上的索引器,请使用this关键字。

using System;

using System.Collections.Generic;

using System.Text;

namespace Index

{

class sample<T> //这个类告诉我们如何使用客户端代码索引器

{

private T[] arr = new T[100];

public T this[int i] //索引器的签名由其形参的数量和类型组成。

{

get { return arr;}

set { arr = value;}

}

}

class IndexerClass

{

private int[] arr = new int[100]; //定义数组

public int this[int index] //索引器声明

{

get

{

if (index < 0 || index >100)

return 0;

return arr[index];

}

set

{

if (!(index < 0 || index > 100)) arr[index] = value;

}

}

}

class String_index

{

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

private int GetDay(string testday)

{

int i = 0;

foreach(string day in days)

{

if (day == testday)

return i;

i++;

}

return -1;

}

public int this[string day]

{

get

{

return GetDay(day);

}

}

}

class Program

{

static void Main(string[] args)

{

sample<string> string_value = new sample<string>();

string_value[0] = "Hello world";

System.Console.WriteLine(string_value[0]);
indexerClass test = new IndexerClass();

//调用索引器初始化第2、4个数据

test[3] = 123;

test[5] = 1024;

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

{

System.Console.WriteLine("数据为#{0} = {1}", i, test);

}

String_index week = new String_index();

System.Console.WriteLine("这是一周的第{0}天", week["Tues"]);

Console.ReadKey();

}

}

}

---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: