委托使用(1)

这是一个委托排序的例子

public enum Comparsion    

{        

theFirstComesFirst=1,        

theSecondComesFirst=2    

}    //来决定排序的顺序

 

class Pair<T>    //在下面我创建的两个类Student,Dog,都把他们保存在Pair里面

{        

private T[] thePair = new T[2];        

public  delegate Comparsion WhichIsFirst(T obj1,T obj2); //定义委托       

public Pair(T firstObject,T secondObject)        

{           

 thePair[0] = firstObject;            

thePair[1] = secondObject;        

 /// <summary>        

/// 排序的过程        

/// </summary>        

/// <param name="whileIsFirst">一个委托实例的传入</param>               

public void Sort(WhichIsFirst whileIsFirst)        

{                        

if (whileIsFirst(thePair[0], thePair[1]) == Comparsion.theSecondComesFirst)            

{                

T same;                

same = thePair[0];                

thePair[0] = thePair[1];                

thePair[1] = same;            

}        

 

public override string ToString()  //重载ToString()方法      

{            

return thePair[0].ToString()+thePair[1].ToString(); //调用Studnt或Dog中的ToString()方法       

}    

}

 

定义Student类

 class Student    {        

public static readonly Pair<Student>.WhichIsFirst w = new Pair<Student>.WhichIsFirst(Student.StudentWhileIsFirst);//如果不想再客户端中申明委托实例,可是在类中写一个静态只读的委托实例        

private String _name;        

public Student(String name)        

{            

this._name = name;        

}        

public static Comparsion StudentWhileIsFirst(Student s1,Student s2)//这里我用的是静态方法,定义一个委托的方法,要跟定义委托的格式一样        

{            

return String.Compare(s1._name, s2._name) < 0 ? Comparsion.theFirstComesFirst : Comparsion.theSecondComesFirst;        

}        

public override string ToString()        

{            

return _name;        

}    

}

 

定义Dog类

class Dog    

{        

private String _weight;        

public Dog(String weight)        

{            

this._weight = weight;        

}        

public  Comparsion DogWhileIsFirst(Dog d1, Dog d2) //这里我用的是类的实例方法       

{            

return String.Compare(d1._weight, d2._weight) < 0 ? Comparsion.theFirstComesFirst : Comparsion.theSecondComesFirst;        

}        

public override string ToString()       

{            

return _weight;        

}    

}

 

客户端代码

Student s1=new Student("gu");            

Student s2=new Student("bao");            

Pair<Student> pairStudent = new Pair<Student>(s1, s2);            

//Pair<Student>.WhichIsFirst stuWhile=new Pair<Student>.WhichIsFirst(Student.StudentWhileIsFirst); //如果Student中没有那个静态只读的成员,就用这一句在然后再调用  pairStudent.Sort(stuWhile)        

pairStudent.Sort(Student.w);            

Console.WriteLine("pairStudent:{0}",pairStudent.ToString());            

Dog d1 = new Dog("56");            

Dog d2 = new Dog("54");            

Pair<Dog> pairDog = new Pair<Dog>(d1,d2);            

Pair<Dog>.WhichIsFirst dogWhile = new Pair<Dog>.WhichIsFirst(d1.DogWhileIsFirst);            

pairDog.Sort(dogWhile);            

Console.WriteLine("dogStudent:{0}", pairDog.ToString());

posted @ 2010-10-21 09:28  gull  Views(253)  Comments(0Edit  收藏  举报