索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,不能在类上直接作用
下面是一个索引器的具体的应用例子,它对我们理解索引器的设计和应用很有帮助。 using System;
class BitArray
{
int[] bits;
int length;
public BitArray(int length)
{
if (length < 0)
throw new ArgumentException();
bits = new int[((length - 1) >> 5) + 1];
this.length = length;
}
public int Length
{
get { return length; }
}
public bool this[int index]
{
get
{
if (index < 0 || index >= length)
throw new IndexOutOfRangeException();
else
return (bits[index >> 5] & 1 << index) != 0;
}
set
{
if (index < 0 || index >= length)
throw new IndexOutOfRangeException();
else if(value)
bits[index >> 5] |= 1 << index;
else
bits[index >> 5] &= ~(1 << index);
}
}
}
class Test
{
static void Main()
{
BitArray Bits=new BitArray(10);
for(int i=0;i<10;i++)
Bits[i]=(i%2)==0; Console.Write(Bits[i]+" ");
}
} 编译并运行程序可以得到下面的输出: True False True False True False True False True False 上面的程序通过索引器的使用为用户提供了一个界面友好的bool数组,同时又大大降低了程序的存储空间代价。索引器通常用于对象容器中为其内的对象提供友好的存取界面--这也是为什么C#将方法包装成索引器的原因所在。实际上,我们可以看到索引器在.NET Framework类库中有大量的应用。 原始出处:http://www.yesky.com/20020730/1622807.shtml你给的分太少,所以很多人不愿意进来解答。(大家都要有分才好让别人解答自已的问题)
下面是一个索引器的具体的应用例子,它对我们理解索引器的设计和应用很有帮助。 using System;
class BitArray
{
int[] bits;
int length;
public BitArray(int length)
{
if (length < 0)
throw new ArgumentException();
bits = new int[((length - 1) >> 5) + 1];
this.length = length;
}
public int Length
{
get { return length; }
}
public bool this[int index]
{
get
{
if (index < 0 || index >= length)
throw new IndexOutOfRangeException();
else
return (bits[index >> 5] & 1 << index) != 0;
}
set
{
if (index < 0 || index >= length)
throw new IndexOutOfRangeException();
else if(value)
bits[index >> 5] |= 1 << index;
else
bits[index >> 5] &= ~(1 << index);
}
}
}
class Test
{
static void Main()
{
BitArray Bits=new BitArray(10);
for(int i=0;i<10;i++)
Bits[i]=(i%2)==0; Console.Write(Bits[i]+" ");
}
} 编译并运行程序可以得到下面的输出: True False True False True False True False True False 上面的程序通过索引器的使用为用户提供了一个界面友好的bool数组,同时又大大降低了程序的存储空间代价。索引器通常用于对象容器中为其内的对象提供友好的存取界面--这也是为什么C#将方法包装成索引器的原因所在。实际上,我们可以看到索引器在.NET Framework类库中有大量的应用。 原始出处:http://www.yesky.com/20020730/1622807.shtml你给的分太少,所以很多人不愿意进来解答。(大家都要有分才好让别人解答自已的问题)
list.Add(...);
...Console.WriteLine(list[0].ToString());ArrayList 类因为定义了索引器,所以用户能像使用数组一样使用你定义的集合类。
class DemoClass
{
private string[] m_var = {"h1","h2","h3"}; public string this[int indexer]
{
get {
return m_var[indexer];
}
}
}
== 这里如果要取dc[0]的值, 0被传递给索引器的indexer参数. 其实和属性/方法差不多. public string this[int indexer]
public就不用说了, string是返回值类型, this这是索引器固定写法. int indexer是参数,索引器都有个参数,不一定是数值型,也可以是其他类型,当然这个参数名也可以不是indexer,比如是其他合法名称.