索引器

索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

在下面的示例中,定义了一个泛型类,并为其提供了简单的get和set访问器方法:

class SampleCollection<T>
{
    
private T[] arr = new T[100];
    
public T this[int i]
    {
        
get
        {
            
return arr[i];
        }
        
set
        {
            arr[i] 
= value;
        }
    }
}

// This class shows how client code uses the indexer
class Program
{
    
static void Main(string[] args)
    {
        SampleCollection
<string> stringCollection = new SampleCollection<string>();
        stringCollection[
0= "Hello, World";
        System.Console.WriteLine(stringCollection[
0]);
    }
}

 

索引器允许您按照处理数组的方式索引类、结构或接口。

要声明类或结构上的索引器,请使用this关键字:

public int this[int index]    // Indexer declaration
{
    
// get and set accessors
}

 C# 并不将索引类型限制为整数。如对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可被重载,字符串和整数版本可以共存。

例:声明了存储星期几的类。声明了一个get访问器,它接受字符串,并返回相应的整数

// Using a string as an indexer value
class DayCollection
{
    
string[] days = { "Sun""Mon""Tues""Wed""Thurs""Fri""Sat" };

    
// This method finds the day or returns -1
    private int GetDay(string testDay)
    {
        
int i = 0;
        
foreach (string day in days)
        {
            
if (day == testDay)
            {
                
return i;
            }
            i
++;
        }
        
return -1;
    }

    
// The get accessor returns an integer for a given string
    public int this[string day]
    {
        
get
        {
            
return (GetDay(day));
        }
    }
}

class Program
{
    
static void Main(string[] args)
    {
        DayCollection week 
= new DayCollection();
        System.Console.WriteLine(week[
"Fri"]);
        System.Console.WriteLine(week[
"Made-up Day"]);
    }
}

 

 

 

posted @ 2010-05-13 11:02  牛小花  阅读(226)  评论(1编辑  收藏  举报