c#中,委托Func的简单实践

时间:2021-05-13 14:56:44

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类型委托实现完毕,有很多不足,希望各位大大能够指正