日期:2014-05-17 浏览次数:20732 次
委托在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 或者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); }
今天到这,明天学习事件。初学,模糊不清,希望看到此博客的有缘人不吝赐教。