using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
delegate int Mydelegetefour<Tdeligate>(Tdeligate x, Tdeligate y);//以前习惯用T来写泛型,其实用其他字符串也行
class 委托练习2
{
public static void Main()
{
委托练习2 w = new 委托练习2();
int y = w.Max(w.arrint);// 一个数组,求最大值 的一般写法
Console.WriteLine(y);
person p1 = w.MaxPerson(w.personArr); //一个对象素组 求age的最大值 的一般写法
Console.WriteLine(p1.Age);
int x = w.GatMax<int>(w.arrint, w.compare);
person px = w.GatMax<person>(w.personArr, w.Pcompare);
/*这里很奇怪,委托是方法的容器,他限制,容纳方法,委托的签名必须满足与方法的签名一致,
这里用到泛型委托,用泛型加以修饰的委托,也开始抽象画了,明明委托签名写着必须返回int
这里去返回 一个 person类 */
Console.WriteLine(x);
Console.WriteLine(px.Age);
Console.ReadKey();
}
int compare(int x, int y)
{
return x < y ? 1 : 0;
}
int Pcompare(person p1, person p2)
{
return p1.Age < p2.Age ? 1 : 0;
}
#region person对象比较最大 age
person[] personArr = { new person() { Name = "a1", Age = 1 },
new person() { Name = "a2", Age = 12 },
new person() { Name = "a3", Age = 2 } };
person MaxPerson(person[] ArrP)
{
person ptemp = ArrP[0];
for (int j = 1; j < ArrP.Length; j++)
{
if (ptemp.Age < ArrP[j].Age)
{
ptemp = ArrP[j];
}
}
return ptemp;
}
#endregion
#region int 比较最大值
int[] arrint = { 1, 2, 5, 7, 71, 56, 4 };
int Max(int[] arr)
{
int temp = arr[0];//
for (int i = 1; i < arr.Length; i++)
{
if (temp < arr[i])
{
temp = arr[i];//临时变量大 则换位
}
}
return temp;
}
#endregion
Tfan GatMax<Tfan>(Tfan[] TArr, Mydelegetefour<Tfan> M)//这才是关键 把泛型委托作为参数
{
Tfan f = TArr[0];
for (int k = 1; k < TArr.Length; k++)
{
if (M(f, TArr[k]) == 1)
{
f = TArr[k];
}
}
return f;
}
}
class person
{
#region 姓名
string name;
public string Name
{
get { return name; }
set { name = value; }
}
#endregion
#region 年龄
int age;
public int Age
{
get { return age; }
set { age = value; }
}
#endregion
}
}