委托可以很方便地实现对一个对象方法的扩展
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);