新手学委托之初识委托(一)

我也刚刚学委托,看了传智播客的一些视频做了一些笔记,有什么错误或者不严谨的地方请多多原谅啊!

什么是委托?
MSDN官网是这么说的:
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
这话说得很官方语,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
为什么需要委托呢?
众所周知,C#是一名强类型的语言,委托就是用来约束它指向的函数的参数(下面会举例说来)。
委托有什么好处呢?
唉,语言表达不咋样,还是在例子中一同说吧。
委托类型声明的格式如下:

public delegate void TestDelegate(string message);

乍一看上去怎么这么变扭啊?这声明格式像定义了一个类,又像定义了一个方法。的确,委托就是相当于声明了一个类。MSDN官网中还有这么一句话:委托是事件的基础。这句又是神马意思呢?委托和事件有神马联系呢?(先不着急,先学会怎么使用最简单委托再说了)。
好了,说了这么多理论的东西,下面开始正式的委托学习吧!

例1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 为什么委托
{
    //声明委托,这是的SampleDelegate是一个类
    //委托就是约束指向的函数的参数,不能瞎指,因为C#是强类型语言
//其实也可以在其他类中声明,但最好还是与其他类保持平行关系 delegate int SampleDelegate(string s, int i2);
class Program { static void Main(string[] args) { //将委托的变量指向与声明委托时一致的方法,不能写出some1(),这样就变成了调用。 //看看some1的方法与委托对比一下,除了加入了delegate关键字以外,其余的是不是完全一致呢? SampleDelegate s1 = some1; //标准写法,可以简写成上面的写法 SampleDelegate s2 = new SampleDelegate(some1); if (DateTime.Now.Second%2==0) { s1 = some1; } else { s1 = some2; } //因为SampleDelegate约束了参数的类型,所以才可以这么调用 //在这一刻程序员不知道指向哪个函数。 //但知道s1指向的函数格式一定是int SampleDelegate(string s, int i2) //调用s1指向的函数 s1("hi", 5); Console.ReadKey(); } static int some1(string s, int i2) { //只输出了变量s Console.WriteLine(s); return 0; } static int some2(string s1, int i3) { //只输出了“有木有!” Console.WriteLine("有木有!"); return i3 + 2; } } }

好了,还有委托的好处和委托与事件的联系下次再讲啊!

 

posted @ 2012-04-18 13:06  烧点饭  阅读(1039)  评论(1编辑  收藏  举报