using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
//如果账户金额小于0 触发事件
namespace Starter
{
public enum Comparison
{
theFirstComesFirst = 1,
theSecondComesFirst = 2
}
//包含两项的简单集合
public class Pair<T>
{
//存放两个对象的私有数组
private T[] thePair = new T[2];
//委托声明
public delegate Comparison WhichIsFirst(T obj1, T obj2);
//构造方法,参数为两个对象,按接收顺序添加
public Pair(T firstObject, T secondObject)
{
thePair[0] = firstObject;
thePair[1] = secondObject;
}
//公共方法,按对象具体顺序范畴排序
public void Sort(WhichIsFirst theDelegatedFunc)
{
if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theSecondComesFirst)
{
T temp = thePair[0];
thePair[0] = thePair[1];
thePair[1] = temp;
}
}
//反序排列
public void ReverSort(WhichIsFirst theDelegatedFunc)
{
if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theFirstComesFirst)
{
T temp = thePair[0];
thePair[0] = thePair[1];
thePair[1] = temp;
}
}
//要求两个对象提供字符串值
public override string ToString()
{
return thePair[0].ToString() + ", " + thePair[1].ToString();
}
}
public class Dog
{
private int weight;
public Dog(int weight)
{
this.weight = weight;
}
public static Comparison WhichDogComesFirst(Dog d1,Dog d2)
{
return d1.weight > d2.weight ?
Comparison.theSecondComesFirst : Comparison.theFirstComesFirst;
}
public override string ToString()
{
return weight.ToString();
}
}
public class Student
{
private string name;
public Student(string name)
{
this.name = name;
}
public static Comparison WhichStudentComesFirst(Student s1, Student s2)
{
return (String.Compare(s1.name, s2.name)<0 ?
Comparison.theFirstComesFirst : Comparison.theSecondComesFirst
);
}
public override string ToString()
{
return name;
}
}
class Program
{
static void Main(string[] args)
{
Student Jess = new Student("Jess");
Student Mary = new Student("Mary");
Dog Milo = new Dog(26);
Dog Free = new Dog(12);
Pair<Student> studentPair = new Pair<Student>(Jess,Mary);
Pair<Dog> dogPair = new Pair<Dog>(Milo, Free);
Console.WriteLine("student pair: " + studentPair.ToString());
Console.WriteLine("dog pair: " + dogPair.ToString());
//Pair下的委托函数 new 出来,Student下的WhichStudentComesFirst绑定到委托函数,参数列表需要相同
Pair<Student>.WhichIsFirst theStudentDelegate = new Pair<Student>.WhichIsFirst(Student.WhichStudentComesFirst);
Pair<Dog>.WhichIsFirst theDogDelegate = new Pair<Dog>.WhichIsFirst(Dog.WhichDogComesFirst);
studentPair.Sort(theStudentDelegate);
Console.WriteLine("student after sort: " + studentPair.ToString());
studentPair.ReverSort(theStudentDelegate);
Console.WriteLine("student after ReverSort: " + studentPair.ToString());
Console.ReadLine();
}
}
}
C#_delegate - Pair<T> & 简单顺序逆序 & 方法委托(在Pair类下)&枚举类型 混搭使用
最新推荐文章于 2022-11-15 14:54:51 发布