[From Network]创建C#索引指示器

 

在程序开发过程中,常常需要对一组对象进行访问,通常是创建数组列表,通过操作数组的方式进行访问。
C#
提供的索引指示器使我们可以方便且高效的完成对一组对象的访问。通常,我们先创建一个容器类,用于存储对象,并且通过实现枚举器接口提供相应的操作方法。以下示例程序演示了如何创建并使用索引指示器。

第一步:创建容器类

这段代码中,使用了ARRAYLIST,使我们可以利用ARRAYLIST的功能特性管理对象;另外,实现IENUMERATOR接口,提供如MOVENEXTRESET等方法,并且使容器类可以支持FOREACH操作。

class Employees:IEnumerator //为了使容器支持(FOREACH...IN...)操作,必须实现IENUME RATOR接口)
{
private ArrayList m_Employees;   //
定义一个ARRAYLIST对象
private int m_MaxEmployees;   //
定义容器可接受的最大对象数量

//构造器,创建ARRAYLIST对象,并且定义可接受的最大对象数量
public Employees(int MaxEmployees)
{
   m_MaxEmployees = MaxEmployees;
   m_Employees = new ArrayList(MaxEmployees);
}
//
按照索引ID创建索引指示器
public Employee this[int index]
{
   get
   {
    if (index < 0 index > m_Employees.Count -1)
    {
     return null;
    }
   
    return (Employee) m_Employees[index];
   }
   set
   {
    if (index <0 index > m_MaxEmployees-1)
    {
     return ;
    }

    m_Employees.Insert(index,value);
   }
}
//
自定义索引指示器
public Employee this[string SSN]
{
   get
   {
    Employee empReturned = null;
    foreach (Employee employee in m_Employees)
    {
     if (employee.SSN == SSN)
     {
      empReturned = employee;
      break;

   }
    
    }
    return empReturned;
   
   }
  

}
//
提供容器内对象数量
public int Length
{
   get
   {
    return m_Employees.Count;
   }
}

//实现IENUMERATOR接口
public IEnumerator GetEnumerator()
{
   return m_Employees.GetEnumerator();
}
public bool MoveNext(){return m_Employees.GetEnumerator().MoveNext();}
public void Reset(){m_Employees.GetEnumerator().Reset();}
public object Current
{
   get
   {
    return m_Employees.GetEnumerator().Current;  
   }
}
}

第二步:构建对象

以下代码实现了一个类Employee

//构建对象
class Employee
{
private string m_firstname;
private string m_middlename;

private string m_lastname;
private string m_SSN;

//构造器,当实例化对象时对属性成员赋值
public Employee(string FirstName,string MiddleName,string LastName,string SSN)
{
   m_firstname = FirstName;
   m_middlename = MiddleName;
   m_lastname = LastName;
   m_SSN = SSN;
}

public string FirstName
{
   get {return m_firstname;}
   set {m_firstname = value;}
}
public string LastName
{
   get{return m_lastname;}
   set{m_lastname = value;}
}
public string MiddleName
{
   get{return m_middlename;}
   set{m_middlename = value;}

}
public string SSN
{
   get{return m_SSN;}
   set{m_SSN = value;}
}

}


第三步:使用索引指示器

创建一个程序,对Employee实例化,并且将对象加入到容器类(Employees);程序判断是否有控制台参数输入,如果有,
将根据参数查询容器中的对象,否则显示容器中所有的对象信息。

class IndexerSample
{
static void Main(string[] args)
{
   try
   {
    //
创建容器类对象
    Employees employees = new Employees(4);
   
    string ssn = "";

    //将实例化的EMPLOYEE对象加入到容器类对象EMPLOYEES

    employees[0] = new Employee("Timothy","Arthur","TUCker","555-555-555");
    employees[1] = new Employee("Jackie","zxh","Cheung","555-555-552");
    employees[2] = new Employee("John","JHK","Kong","555-555-553");
    employees[3] = new Employee("Ken","KNC","Chang","555-555-551");
   
    if (args.Length > 0)
    {
    
     foreach(string s in args)
     {
      ssn = ssn + s;
     }

    //根据自定义的索引关键字SSN查找对象

    Employee employee = employees[ ssn.ToString() ];
    if (employee !=null )
    {
     string name = employee.FirstName + " " + employee.LastName;
    
     Console.WriteLine("Name: {0},SSN:{1}", name,ssn);
    }
    else
    {
     Console.WriteLine("Can Not find the record !");
    }

}
    else
    { //
显示容器中所有的对象信息
    for (int i = 0 ; i < employees.Length; i++)
    {
     string name = employees[i].FirstName + " " +

      employees[i].MiddleName + " " +
      employees[i].LastName;

     ssn = employees[i].SSN;

     Console.WriteLine("Name: {0},SSN:{1}", name,ssn);
    }
    }
   
   }
   catch (Exception e)
   {
    Console.WriteLine (e.Message );
   }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值