今天学习了indexer的一点知识,现整理下思路并做点归纳.
索引器也成为参数化的属性.但与属性有2点不同:(1)它可以有一个或者多个参数(2)使用this关键字作为indexer的名字.另,注意:indexer不支持static修饰,因为indexer只适用于实例.
示例1,从他人的blog上看到,讲得比较通俗易懂:
using System;
class IndexerClass
{
private int[] myArray = new int[100];
public int this [int index] // Indexer declaration
{
get
{ //Check the index limits.
if(index < 0 || index >=100)
return 0;
else
return myArray[index];
}
set
{
if(!(index < 0 ||index>= 100))
myArray[index] = value;
}
}
}
public class MainClass
{
public static void Main()
{
IndexerClass b = new IndexerClass();
// Call the indexer to initialize the elements #3 and #5.
b[3] = 256;
b[5] = 1024;
for(int i=0;i<=10;i++)
{
Console.WriteLine("Element #{0} = {1}", i, b[i]);
}
}
}
class IndexerClass
{
private int[] myArray = new int[100];
public int this [int index] // Indexer declaration
{
get
{ //Check the index limits.
if(index < 0 || index >=100)
return 0;
else
return myArray[index];
}
set
{
if(!(index < 0 ||index>= 100))
myArray[index] = value;
}
}
}
public class MainClass
{
public static void Main()
{
IndexerClass b = new IndexerClass();
// Call the indexer to initialize the elements #3 and #5.
b[3] = 256;
b[5] = 1024;
for(int i=0;i<=10;i++)
{
Console.WriteLine("Element #{0} = {1}", i, b[i]);
}
}
}
示例2:
using System;
using System.Collections;
namespace ConsoleApplication1
{
/// <summary>
/// Upholstery 的摘要说明:装饰类
/// </summary>
public class Upholstery
{
Field
Constructor
Property
}
public class Fabrics
{
Field
Indexr
}
public class IndexerApp
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
///
[STAThread]
static void Main(string[] args)
{
Fabrics sofaFabrics = new Fabrics();//默认构造函数
sofaFabrics[0] = new Upholstery(15.00,8,"Silk");
sofaFabrics[1]= new Upholstery(12.00,6,"Wool");
sofaFabrics[2]= new Upholstery(9.00,6,"Cotton");
Console.WriteLine("Fabric: {0}",sofaFabrics[0].FabricName);//取FabricName属性
Console.ReadLine();
}
}
}
using System.Collections;
namespace ConsoleApplication1
{
/// <summary>
/// Upholstery 的摘要说明:装饰类
/// </summary>
public class Upholstery
{
Field
Constructor
Property
}
public class Fabrics
{
Field
Indexr
}
public class IndexerApp
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
///
[STAThread]
static void Main(string[] args)
{
Fabrics sofaFabrics = new Fabrics();//默认构造函数
sofaFabrics[0] = new Upholstery(15.00,8,"Silk");
sofaFabrics[1]= new Upholstery(12.00,6,"Wool");
sofaFabrics[2]= new Upholstery(9.00,6,"Cotton");
Console.WriteLine("Fabric: {0}",sofaFabrics[0].FabricName);//取FabricName属性
Console.ReadLine();
}
}
}
Fabric类包含一个索引器,它使用get,set来控制内部Upholstery对象数组的访问.利用传递给对象的一个索引参数,索引器允许直接访问内部数组.
使用索引器的优点在于,它对用户隐藏了数组操作细节,而且在返回值之前,可以完成有效性检查或者数据修改.如果对象的成员属性可以表示为结合(而不是标量值),这种情况下索引器最为适用.