刘铁猛《C#语言入门详解》019 委托详解 模板方法案例

刘铁猛《C#语言入门详解》019 委托详解

什么是委托delegate

委托是函数指针的升级版

举例说明:C/C++中的函数指针

程序员常提及的概念:一切皆地址

1)变量(数据)是以某个地址为起点的一段内存中所存储的值

解释:数据存储在变量中,变量的本质:以变量名所对应的内存地址为起点的一段内存[存储着变量的数据],内存的大小由数据类型决定

2)函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令

函数的本质:以函数名所对应的内存地址为起点的一段内存,在这段内存中存储的是一组机器语言的指令,CPU按照这组指令一条一条完成

3)直接调用&间接调用

1)直接调用:通过函数名调用函数,CPU通过函数名直接获得函数的地址并开始执行 返回

2)间接调用:通过函数指针调用函数,CPU通过读取函数指针中存储的值获得函数的地址并开始执行 返回

模板方法案例

namespace DelegateExample

{

  class Program

  {

    static void Main(string[] args)

    {

      ProductFactory productFactory = new ProductFactory();

      WarpFactory warpFactory = new WarpFactory();

      Func<Product> func1 = new Func<Product>(productFactory.MakePizza);

      Func<Product> func2 = new Func<Product>(productFactory.MackToyCar);

      Box box1 = warpFactory.WarpProduct(func1);

      Console.WriteLine(box1.Product.Name );

      Box box2 = warpFactory.WarpProduct(func2);

      Console.WriteLine(box2.Product.Name);

      Console.ReadLine();

    }

  }

  class Product

  {

    public string Name { get; set; }

  }

  class Box

  {

    public Product Product { get; set; }

  }

  class WarpFactory

  {

    public Box WarpProduct(Func<Product> getProduct)

    {

      Box box = new Box();

      Product product = getProduct.Invoke();

      box.Product = product;

      return box;

    }

  }

  class ProductFactory

  {

    public Product MakePizza()

    {

      Product product = new Product();

      product.Name = "Pizza";

      return product;

    }

    public Product MackToyCar()

    {

      Product product = new Product();

      product.Name = "ToyCar";

      return product;

       

    }

  }

}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值