c# 委托Func的简单实践
最近才真正的接触委托,所以针对Func类型的委托,做一个实践练习。
首先说一些我对委托的初级理解:“就是把方法当做参数,传进委托方法里”。
我平时用到的有三种:
1、把方法A()传进委托,委托中直接执行方法A()。
2、把方法A(int index)传进委托,委托中创建A中的参数index,然后执行方法A(index)。
3、把方法A(int index)与index值,都传进委托,委托中直接执行方法A(index)。
Func在我的理解中是一个必须有返回值的,可以使用范型的 委托。
我可以把Func比喻成一个面包房,与上面三种方法对应的例子就是:
1、我把做面包的方法,告诉给面包房,面包房可以自动生产一个面包出来。
2、我把做面包的方法(此方法需要人工实现),告诉给面包房,面包房找一个员工,根据方法,做出来一个面包。
3、我租借面包房的地方,我自己待着做面包的方法(此方法需要人工),自己通过方法,做出来一个面包。
以下为代码实现过程。
首先建立两个实体 客人(Customer) 与 员工(Employee)
Customer:
/// <summary> /// 客人 /// </summary> public class Customer { public string Name { get; set; } }
Employee:
/// <summary> /// 员工 /// </summary> public class Employee { public string Name { get; set; } }
然后 建立面包实体(BreadInfo)
/// <summary> /// 面包 /// </summary> public class BreadInfo { /// <summary> /// 名称 /// </summary> public string Name { get; set; } }
建立一个面包房类(Bakery)
/// <summary> /// 面包房 /// </summary> public class Bakery { /// <summary> /// 做食物 /// </summary> /// <typeparam name="T">范型(食物类型)</typeparam> /// <param name="func"></param> /// <returns></returns> public static T MakeFood<T>(Func<T> func) { //直接执行方法 return func(); } /// <summary> /// 通过面包房员工 做食物 /// </summary> /// <typeparam name="T">范型(食物类型)</typeparam> /// <param name="func"></param> /// <returns></returns> public static T MakeFoodByEmployee<T>(Func<Employee, T> func) { //找一个面包房员工 Employee e = new Employee(); //将参数e(面包房员工)传进方法中 return func(e); } /// <summary> /// 租借面包房 做食物 /// </summary> /// <typeparam name="T">范型(食物类型)</typeparam> /// <param name="func"></param> /// <param name="c"></param> /// <returns></returns> public static T BorrowMakeFood<T>(Func<Customer, T> func, Customer c) { //将参数c(客户)传进方法中 return func(c); } }
建立一个方法类(Function) 方法中有做面包的三种方式
/// <summary> /// 做面包方法类 /// </summary> public class Function { /// <summary> /// 直接做面包 /// </summary> /// <returns></returns> public static BreadInfo MakeBread() { return new BreadInfo(); } /// <summary> /// 用过客户自己 做面包 /// </summary> /// <param name="c">客户自己</param> /// <returns></returns> public static BreadInfo MakeBreadByCustomer(Customer c) { return new BreadInfo(); } /// <summary> /// 用过面包房员工 做面包 /// </summary> /// <param name="e">面包房员工</param> /// <returns></returns> public static BreadInfo MakeBreadByEmployee(Employee e) { return new BreadInfo(); } }
完毕以后 就可以调用了。
//直接让面包房自动 做面包 var f = Bakery.MakeFood(Function.MakeBread); //通过面包房员工 做面包(员工是面包房自动提供的 不用传进去) var f1 = Bakery.MakeFoodByEmployee(Function.MakeBreadByEmployee); //客户自己租借面包房地点 做面包(客户自己需要传进去) Customer c = new Customer(); var f2 = Bakery.BorrowMakeFood<BreadInfo>(Function.MakeBreadByCustomer, c);
一个简单Func类型委托实现完毕,有很多不足,希望各位大大能够指正