日期:2014-05-17  浏览次数:20678 次

C# 委托机制

委托在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);      
}



今天到这,明天学习事件。初学,模糊不清,希望看到此博客的有缘人不吝赐教。