C#学习(七)——委托与事件

本文详细介绍了C#中的委托和事件,包括委托的定义和作用,预定义的Func和Action委托方法,预定义事件的使用,自定义事件的声明以及字段式事件声明。通过示例代码展示了如何使用委托提高代码的灵活性和可扩展性,以及事件在数据、操作和通知中的应用。
摘要由CSDN通过智能技术生成

一、委托(delegate)

使用delegate关键词,表示一个委托,该委托是表示某一静态方法或某一类实例和该类的实例方法的数据结构。
delegate是一个类而不是一个方法

  • [ 委托就是方法指针,仅仅指向方法的名称,不表示具体的执行过程 ]
  • [ 方法指针是一种数据类型,它所处理的是方法引用过程的类型 ]
  • [ 委托与被委托的方法必须“类型兼容”,即返回类型一致,参数类型一致 ]

代码示例:使用委托模拟photoshop添加滤镜
原始代码
Program.cs

class Program
{
   
    static void Main(string[] args)
    {
   
        var photo = Photo.load("phtot.jpg");

        var processor = new PhotoProcessor();
        processor.Process(photo);

        Console.Read();
    }
}

Photo.cs

public class Photo
{
   
    public static Photo load(string path)
    {
   
        return new Photo();
    }

    public void Save()
    {
   

    }
}

PhotoProcessor.cs

public class PhotoProcessor
{
   
    public void Process(Photo photo)
    {
   
        var filters = new PhotoFilters();
        filters.ApplyBrightness(photo);
        filters.ApplyContrast(photo);
        filters.Resize(photo);

        photo.Save();
    }
}

PhotoFilters.cs

public class PhotoFilters
{
   
    public void ApplyBrightness(Photo photo)
    {
   
        Console.WriteLine("亮度增加");
    }

    public void ApplyContrast(Photo photo)
    {
   
        Console.WriteLine("对比度增加");
    }

    public void Resize(Photo photo)
    {
   
        Console.WriteLine("图片放大");
    }
}

注意到,按照此时的代码,如果需要进一步添加滤镜,就需要在PhotoFilters中写入,并且在PhotoProcessor中进行调用,如此动作都是在修改源代码的基础上,因此,此时的源代码不具有任何可扩展性。因此使用委托来进行
PhotoProcessor.cs

public delegate void PhotoFiliterHandler(Photo photo);

public class PhotoProcessor
{
   
    public void Process(Photo photo, PhotoFiliterHandler photoFiliterHandler)
    {
   
        photoFiliterHandler(photo);

        photo.Save();
    }
}

Program.cs

class Program
  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值