C#委托初步

委托可以很方便地实现对一个对象方法的扩展

PhotoFilters是一个类,有3个人方法:

cs 复制代码
public void ApplyBrightness(Photo photo)
        {
            Console.WriteLine("亮度增加");
        }

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

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

现在想要增加一个方法,使用委托:

cs 复制代码
 var photo = Photo.load("phtot.jpg");
var filters = new PhotoFilters();
在PhotoProcessor类中定义委托
public class PhotoProcessor
    {
        public delegate void PhotoFilterHandler(Photo photo);

        public void Process(Photo photo, PhotoFilterHandler filterHandler)
        {
            filterHandler(photo);
            photo.Save();
        }
    }
在main方法中使用委托
//先给一个委托赋初值
PhotoFilterHandler filterHandler = filters.ApplyBrightness;
//在把其它方法给委托,这样委托就指向了一组方法
 filterHandler += filters.ApplyContrast;
            filterHandler += filters.Resize;
//在main方法中声明一个扩展的方法
static void RedEyesRemovalFilter(Photo photo)
        {
            Console.WriteLine("去除红颜");
        }
//将这个方法添加进委托
            filterHandler += RedEyesRemovalFilter;
//使用委托
var processor = new PhotoProcessor();
            processor.Process(photo, filterHandler);
相关推荐
ptu小鹏11 分钟前
类和对象(中)
开发语言·c++
我该如何取个名字1 小时前
Mac mini 安装mysql数据库以及出现的一些问题的解决方案
数据库·mysql·macos
曹弘毅2 小时前
doris/clickhouse常用sql
数据库·sql·clickhouse·doris
Bayi·2 小时前
前端面试场景题
开发语言·前端·javascript
碎梦归途2 小时前
23种设计模式-结构型模式之享元模式(Java版本)
java·开发语言·jvm·设计模式·享元模式
Xiaoyu Wang2 小时前
Go协程的调用与原理
开发语言·后端·golang
菜萝卜子2 小时前
【Redis】redis主从哨兵
数据库·redis·缓存
蒂法就是我3 小时前
MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁?
数据库·mysql
bigear_码农3 小时前
python异步协程async调用过程图解
开发语言·python·线程·进程·协程
IvanCodes3 小时前
MySQL 锁机制
数据库·sql·mysql·oracle