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);
相关推荐
YYYing.2 分钟前
【C++进阶系列 (一)】关于线程堆栈的那些事 (上篇)
c语言·开发语言·c++·线程堆栈
Discipline~Hai3 分钟前
Linux网络编程05-sqlite3数据库
linux·c语言·网络·数据库·sqlite·linux应用软件编程
zh73144 分钟前
Go 1.23 → 1.26 升级检查文档
开发语言·chrome·golang
CRMEB系统商城5 分钟前
汽车养护连锁的数字化底座CRMEB 多门店系统实战方案
java·开发语言·小程序·开源·汽车
青禾83710 分钟前
一文入门 MySQL + MongoDB + Redis:三大数据库核心知识
数据库·mysql·mongodb
努力努力再努力wz12 分钟前
【Redis入门系列】:从 RESP 协议到 redis-plus-plus:Redis 客户端编程与 C++ 接口设计
开发语言·数据库·c++·redis·分布式·缓存·架构
志栋智能15 分钟前
凌晨3点的告警,如何用AI在5分钟内完成定界?
运维·服务器·数据库·人工智能·自动化
G.E.M.小白19 分钟前
【SQLite3 数据库】从安装、SQL 操作到 C/C++ API 实战
数据库·oracle·sqlite3
神明不懂浪漫32 分钟前
【第一章】MySQL简介
数据库·经验分享·笔记·mysql·oracle
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 14 章:GROUP BY
运维·数据库·笔记·后端·学习·mysql·dba