当前位置:首页 > C#学习 > 正文内容

C# 委托(三) 模板方法 和 回调方法

小道6年前 (2018-11-04)C#学习4945

模板方法:

using System;

namespace 模板方法
{
    class Program
    {
        static void Main(string[] args)
        {
            工厂 gc = new 工厂();//实例化一个 工厂 类 gc
            包装 bz = new 包装();//实例化一个 包装 类 bz
            Func<产品> F1 = new Func<产品>(gc.制作披萨);//声明一个委托, 并初始化
            Func<产品> F2 = new Func<产品>(gc.制作玩具汽车);//声明一个委托, 并初始化
            箱子 b1 = bz.包装产品(F1);//调用 包装 类 里面的 包装产品 方法,并将接收返回值赋值给b1  PS:在这里会跳转到 包装产品() 这个方法。
            箱子 b2 = bz.包装产品(F2);//调用 包装 类 里面的 包装产品 方法,并将接收返回值赋值给b2  PS:在这里会跳转到 包装产品() 这个方法。
            Console.WriteLine(b1.产品.名字);//输出
            Console.WriteLine(b2.产品.名字);//输出
            Console.ReadKey();//按任意键
        }
    }
    class 产品  //定义一个 产品 类
    {
        public string 名字 { get; set; } //声明一个属性
    }
    class 箱子 //定义一个 箱子 类
    {
        public 产品 产品 { get; set; }//将产品 类作为属性
    }
    class 包装 //定义一个 包装 类
    {
        public 箱子 包装产品(Func<产品> get产品) // 方法,参数是一个 委托,委托的参数类型是一个 产品类。  返回值类型是 箱子 类型。
        {
            箱子 b = new 箱子();//实例化一个箱子类 b。
            产品 c = get产品();//将传进来的委托变量执行结果赋值给 产品类 c    PS:在这里 get产品() 会先跳转到,传进来的委托的对象,比如:gc.制作披萨  后将得到的值赋值给 c
            b.产品 = c;//将c赋值给 b 类中的 产品。 
            return b;//返回一个 箱子类的 b的值.
        }
    }
    class 工厂//定义一个工厂类
    {
        public 产品 制作披萨()// 方法,返回值类型是 产品 类型。
        {
            产品 c = new 产品();//实例化一个 产品 类 c
            c.名字 = "披萨";//给这个产品命名。
            return c;//返回一个 产品类的 c的值。
        }
        public 产品 制作玩具汽车()// 方法,返回值类型是 产品 类型。
        {
            产品 w = new 产品();//实例化一个 产品 类 w
            w.名字 = "小汽车";//给这个产品命名。
            return w;//返回一个 产品类的 w的值。
        }
    }
}

输出结果:

image.png


回调方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 回调方法
{
    class Program
    {
        static void Main(string[] args)
        {
            工厂 gc = new 工厂();//实例化一个 工厂 类 gc
            包装 bz = new 包装();//实例化一个 包装 类 bz
            Func<产品> F1 = new Func<产品>(gc.制作披萨);//声明一个委托, 并初始化
            Func<产品> F2 = new Func<产品>(gc.制作玩具汽车);//声明一个委托, 并初始化
            记录 jl = new 记录();//实例化一个 记录 类 jl
            Action<产品> A1 = new Action<产品>(jl.记);//声明一个委托,并初始化
            箱子 b1 = bz.包装产品(F1, A1);//调用 包装 类 里面的 包装产品 方法,并将接收返回值赋值给b1  PS:在这里会跳转到 包装产品() 这个方法。
            箱子 b2 = bz.包装产品(F2, A1);//调用 包装 类 里面的 包装产品 方法,并将接收返回值赋值给b2  PS:在这里会跳转到 包装产品() 这个方法。
            Console.WriteLine(b1.产品.名字);//输出
            Console.WriteLine(b2.产品.名字);//输出
            Console.ReadKey();//按任意键
        }
    }

    class 记录 //定义一个 记录 类
    {
        public void 记(产品 c)//方法,参数类型是一个 产品 类 c。
        {
            Console.WriteLine("产品名字:{0},生产时间:{1},产品价格:{2}.", c.名字, DateTime.UtcNow, c.价格);//输出
        }
    }
    class 产品  //定义一个 产品 类
    {
        public string 名字 { get; set; } //声明一个属性
        public double 价格 { get; set; } //声明一个属性
    }
    class 箱子 //定义一个 箱子 类
    {
        public 产品 产品 { get; set; }//将产品 类作为属性
    }
    class 包装 //定义一个 包装 类
    {
        public 箱子 包装产品(Func<产品> get产品, Action<产品> get记录) // 方法,参数是 委托,委托的参数类型是 产品类 和 记录类。  返回值类型是 箱子 类型。
        {
            箱子 b = new 箱子();//实例化一个箱子类 b。
            产品 c = get产品();//将传进来的委托变量执行结果赋值给 产品类 c    PS:在这里 get产品() 会先跳转到,传进来的委托的对象,比如:gc.制作披萨  后将得到的值赋值给 c
            if (c.价格 > 10)//判断接收到的产品价格是否小于10元。
            {
                get记录(c);//大于10 则调用委托 记录。
            }

            b.产品 = c;//将c赋值给 b 类中的 产品。 
            return b;//返回一个 箱子类的 b的值.
        }
    }
    class 工厂//定义一个工厂类
    {
        public 产品 制作披萨()// 方法,返回值类型是 产品 类型。
        {
            产品 c = new 产品();//实例化一个 产品 类 c
            c.名字 = "披萨";//给这个产品命名。
            c.价格 = 8;//价格
            return c;//返回一个 产品类的 c的值。
        }
        public 产品 制作玩具汽车()// 方法,返回值类型是 产品 类型。
        {
            产品 w = new 产品();//实例化一个 产品 类 w
            w.名字 = "小汽车";//给这个产品命名。
            w.价格 = 15;//价格
            return w;//返回一个 产品类的 w的值。
        }
    }
}

输出结果:

image.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/112.html

分享给朋友:

“C# 委托(三) 模板方法 和 回调方法” 的相关文章

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。            Console.WriteLine("...

​while语句:不断要求用户输入一个数字(假定用户输入的都是正整数)

​while语句:不断要求用户输入一个数字(假定用户输入的都是正整数)

while语句:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。    ...

函数:给我一个字符串,然后字符串使用我指定的分隔符来进行分割

函数:给我一个字符串,然后字符串使用我指定的分隔符来进行分割

函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。有了函数写代码就像拼积...

函数的ref、out参数

函数的ref、out参数

函数参数默认是值传递的,也就是“复制一份”ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。  ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。