今天在极客学院学的C#委托章节,觉得很有意思,说点我的课后感悟跟大家讨论讨论。
C#中的委托与C、C++中的函数指针很类似,但是比他们要安全的很多(我觉得授课布道师讲得最多的就是C#如何写一个安全可靠的程序)。怎么安全呢?每个委托的声明delegate 类型 函数名 (参数类型 parameter),函数类型、参数类型都要与你要调用的函数完全一致才可以用哦,这就避免了因为类型不一而可能产生的问题。
这里用delegate void my_delegate (int i);这个声明来做例子。
对于一个静态(static修饰的,以前我总是不明有的方法为什么要用static来修饰)的函数方法,每一个实例化的委托都可以在实例化时直接将该静态的函数名放进去就好,但如果不是静态的(没有static修饰的),就要先实例化这个方法所在的类,再调用这个类的的实例来实例化你的委托。比如你的非静态方法在class C里,那么就要先 C _c = new C();
然后在进行 my_delegate 一个实例 = new my_delegate(_c.方法名);
委托的好处就是一个委托实例可以实现对多种方法的调用,哈哈这样写程序就很清晰了(不过好像也并没什么卵用啊,我直接实例一个类,要用那个函数直接调用哪个函数不也行吗)。
还有一个重点就是多重委托,比如 my_delegate my_d1 = new my_delegate(方法1);
my_delegate my_d2 = new my_delegate(方法2);
my_delegate my_d3 = my_d1 + my_d2;
my_d3(.......);
通过一个my_d3就实现了两个方法有顺序的调用。