Persuit perfect

step by step,try my best
  首页  :: 新随笔  :: 管理

索引器(indexer)的使用

Posted on 2007-11-04 21:29  Kathleen  阅读(283)  评论(0编辑  收藏  举报

    今天学习了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]);   
              }
   
        }
   
  }
  

   示例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();
      }

     }

    }



   Fabric类包含一个索引器,它使用get,set来控制内部Upholstery对象数组的访问.利用传递给对象的一个索引参数,索引器允许直接访问内部数组.
   使用索引器的优点在于,它对用户隐藏了数组操作细节,而且在返回值之前,可以完成有效性检查或者数据修改.如果对象的成员属性可以表示为结合(而不是标量值),这种情况下索引器最为适用.