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);
相关推荐
科技小花24 分钟前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56611 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
FQNmxDG4S2 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人2 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang2 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全3 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717213 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
axng pmje3 小时前
Java语法进阶
java·开发语言·jvm
老前端的功夫3 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287923 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日