委托在C#中应用非常广泛。最近初学C#,记录
delegate
一般语法:首先声明delegate
public delegate void BoilHandler(int param);
相比普通方法:
public float scrollValue()
形式上只是多了一个标志 delegate而已。其实可以这样理解前面一条声明:相当与定义了一个参数类型,该参数类型表示所有可以接收int参数的方法。。
面向对象思想告诉我们一切都是对象,包括;int 、char 、String 甚至包括method(方法)。既然参数可以是其他对象,当然可以是Method了。
定义一个方法fuction,接收一个Boilhandler的参数类型。
fuction(BoilHandler boilHandler ){
int m = 1;;
boilHandler(m);
}
假如还有个方法是这样的:void add(int i){
i++;
}
当其他地方调用fuction函数时就可以将add方法传入,fuction(add);
这里,对委托做一个总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
既然如此,当然可以对委托经行实例化!并且可以通过C#语法将方法绑定到委托上,
实例化和String类是一样的:
public BoilHandler b1,b2;
绑定如:b1+=add; b2+=decrease;
调用时只需传入参数b1 或者b2即可! 如:fuction(b1); 方法一经调用,即会执行add方法。。。
这里需要注意一点是:我们可以将多个方法绑定到一个delegate上。通常一个实例即可。
如:b1 += add; b1 += decrease;如果调用fuction(b1);即会依次执行add和decrease两个方法。。
+=表示绑定一个方法,-=表示取消绑定;
下面是一个比较简洁的委托事例:
public class DelegateManager{
public BoilHandler bh;
public void fuction(int a){
if(bh != null){
bh(a);
}
}
}
客户端这样调用即可
static void Main(string[] args) {
DelegateManager dm = new DelegateManager();
dm.bh = add;
dm.bh += derease;
bh.fuction(3);
}
今天到这,明天学习事件。初学,模糊不清,希望看到此博客的有缘人不吝赐教。