zoukankan      html  css  js  c++  java
  • c#中,委托Func的简单实践

    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; }
    }
    View Code

    Employee:

    /// <summary>
    /// 员工
    /// </summary>
    public class Employee
    {
        public string Name { get; set; }
    }
    View Code

    然后 建立面包实体(BreadInfo)

    /// <summary>
    /// 面包
    /// </summary>
    public class BreadInfo
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
    }
    View Code

    建立一个面包房类(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类型委托实现完毕,有很多不足,希望各位大大能够指正

  • 相关阅读:
    windows命令行下导入excel数据到SQLite数据库
    Android Studio如何提示函数用法
    在不root手机的情况上读取Data目录上的文件
    OSI七层模型
    设计模式之代理模式
    Android中Javascript中的调用
    cf #205 B Codeforces Round #205 (Div. 2) B. Two Heaps
    uva 10600 次小生成树
    防2B && 图论模板 && 7788
    最大匹配 && 最佳完美匹配 模板
  • 原文地址:https://www.cnblogs.com/yinq/p/6288870.html
Copyright © 2011-2022 走看看