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);
相关推荐
转调12 分钟前
每日一练:地下城游戏
开发语言·c++·算法·leetcode
Java探秘者13 分钟前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_7869643619 分钟前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
2303_8120444622 分钟前
Bean,看到P188没看了与maven
java·开发语言
秋夫人24 分钟前
idea 同一个项目不同模块如何设置不同的jdk版本
java·开发语言·intellij-idea
不穿格子衬衫40 分钟前
常用排序算法(下)
c语言·开发语言·数据结构·算法·排序算法·八大排序
萧鼎1 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
wdxylb1 小时前
使用C++的OpenSSL 库实现 AES 加密和解密文件
开发语言·c++·算法
Geek之路1 小时前
QT系统学习篇(1)
开发语言·qt·学习
阿维的博客日记1 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表