索引器与数组的区别(详解)
来源:互联网 发布:木秀于林风必助之知乎 编辑:程序博客网 时间:2024/06/05 11:20
索引器与数组的比较:
索引器的索引值不受类型限制。用来访问数组的索引值一定是整数,而索引器可以是其他类型的索引值。
索引器允许重载,一个类可以有多个索引器。
索引器不是一个变量没有直接对应的数据存储地方。索引器有get和set访问器。
索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。
简单的索引器实例:
索引器与属性的比较:
标示方式:属性以名称来标识,索引器以函数签名来标识。
索引器可以被重载。属性则不可以被重载。
属性可以为静态的,索引器属于实例成员,不能被声明为static
多参数索引器实例:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Study
{
class Program
{
static void Main(string[] args)
{
ScoreIndex s = new ScoreIndex();
s["张三", 1] = 90;
s["张三", 2] = 100;
s["张三", 3] = 80;
s["李四", 1] = 60;
s["李四", 2] = 70;
s["李四", 3] = 50;
Console.WriteLine("张三课程编号为1的成绩为:" + s["张三",1]);
Console.WriteLine("张三的所有成绩为:");
ArrayList temp;
temp = s["张三"];
foreach (IndexClass b in temp)
{
Console.WriteLine("姓名:" +b.Name + "课程编号:" + b.CourseID + "分数:" + b.Score);
}
Console.ReadKey();
}
}
class IndexClass
{
private string _name;
private int _courseid;
private int _score;
public IndexClass(string _name, int _courseid, int _score)
{
this._name = _name;
this._courseid = _courseid;
this._score = _score;
}
public string Name
{
get { return _name; }
set { this._name = value; }
}
public int CourseID
{
get { return _courseid; }
set { this._courseid = value; }
}
public int Score
{
get { return _score; }
set { this._score = value; }
}
}
class ScoreIndex
{
private ArrayList arr;
public ScoreIndex()
{
arr = new ArrayList();
}
public int this[string _name, int _courseid]
{
get
{
foreach (IndexClass a in arr)
{
if (a.Name == _name&& a.CourseID == _courseid)
{
return a.Score;
}
}
return -1;
}
set
{
arr.Add(new IndexClass(_name,_courseid, value)); //arr["张三",1]=90
}
}
//重载索引器
public ArrayList this[string _name]
{
get
{
ArrayList temp = newArrayList();
foreach (IndexClass b in arr)
{
if (b.Name == _name)
{
temp.Add(b);
}
}
return temp;
}
}
}
}
备注:
所有索引器都使用this关键词来取代方法名。Class或Struct只允许定义一个索引器,而且总是命名为this。
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。
get 访问器返回值。set 访问器分配值。
this 关键字用于定义索引器。
value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
索引器可被重载。
索引器可以有多个形参,例如当访问二维数组时。
索引器可以使用百数值下标,而数组只能使用整数下标:如下列定义一个String下标的索引器
public int this [string name] {...}
属性和索引器
属性和索引器之间有好些差别:
类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。
属性可以是static(静态的)而索引器则必须是实例成员。
摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/kf/201010/76539.html
- 索引器与数组的区别(详解)
- 指针与数组的区别详解
- js数组的索引详解
- 索引器与数组的比较
- C#索引器-索引器与数组属性的比较
- 索引器-索引器与数组属性的比较
- 属性与索引器的区别
- C# 索引器与属性的区别
- 索引扫描与索引查找的区别
- 主键与索引的区别
- 主键与索引的区别
- 爬行与索引的区别
- 数组索引加不加引号的区别
- 索引的类型与详解
- MySQL索引:聚簇索引与非聚簇索引的区别
- MySQL索引:聚簇索引与非聚簇索引的区别
- 静态数组与动态数组的区别以及二维数组地址详解
- 聚集索引与非聚集索引的区别与理解
- C#中is 和 as 的区别
- 类的继承/组合
- 异常处理
- C#静态类和密闭类
- C#索引器(小例子)
- 索引器与数组的区别(详解)
- C#命名空间问题
- C#常量和静态成员
- C#winform 走马灯程序
- C# GDI画图
- 数据库技巧
- ADO_NET数据库连接示例
- 数据库的基本操作(增删改查)
- VS-Help Library安装