找回密码
 入驻
搜索
查看: 73649|回复: 6

《百家讲坛之ZKK读C#委托》·第一讲

[复制链接]
发表于 2007-4-26 13:16:18 | 显示全部楼层 |阅读模式
C#是面向对象的程序设计语言,有很多OO的特点,如接口、继承、多态、委托等,我发现这几次课老谢讲委托同学们都很痛苦,所以我在这里用尽量通俗易懂的语言来讲解这个另人发指的东西。

      委托可以看作是C#的一种新类型,其实就算单按字面上的理解也能解释委托的性质,就是代理,代替某个方法去做某件事情。
      1.合法的委托声明:
     
  1. delegate string GetString();
复制代码

      也可以加上访问修饰符
  1. public delegate string GetString();
复制代码
我们在这里合法地声明了一个无参数,返回类型为字符串的一个委托。

      如果要声明一个名为MyDelegate的公有的委托,返回类型为Double,具有两个参数均为Long类型,则可声明如下:
     
  1. public delegate double MyDelegate(long l1,long l2);
复制代码


      2.让我们的委托参与工作:
      看下列代码,它诠释了一个最简单的委托的工作流程
     
  1.       public delegate string GetString();
  2.         class Class1
  3.         {        
  4.                 //结构体Currency
  5.                 struct Currency
  6.                 {
  7.                         public Currency()
  8.                         {}
  9.                         public static string GetCurrUnit()
  10.                         {
  11.                                 return "dddd";
  12.                         }
  13.                 }
  14.                 static void Main(string[] args)
  15.                 {
  16.                         int x=11,y=22;
  17.                         //使委托绑定方法,绑定的方法是类型x的ToString方法,方法后省略参数列表是委托调用的特有格式,
  18.                         //因为我们声明的委托参数列表为0参数(没有参数),所以和ToString 0参数的重载函数,
  19.                         //符合我们之前声明的委托,所以委托对象g1绑定的是0参数的ToString
  20.                         GetString g1 = new GetString(x.ToString);
  21.                         //以下输出等同于输出x.ToString(),委托替我们完成了ToString将整型x转换为string型的工作
  22.                         Console.WriteLine(g1());
  23.                         
  24.                         //委托也可以调用结构体类型的方法,以下语句分别使得委托对象g1绑定的是结构体对象cu的ToString方法
  25.                         //和GetCurrUnit方法
  26.                         Currency cu = new Currency();
  27.                         g1 = new GetString(cu.ToString);
  28.                         Console.WriteLine(g1());
  29.                         //因为是静态方法,所以用类名直接引出
  30.                         g1 = new GetString(Currency.GetCurrUnit);
  31.                         Console.WriteLine(g1());
  32.                         Console.ReadLine();
  33.                 }                                
  34.         }
  35.       
复制代码

[ 本帖最后由 zkkpkk 于 2007-4-27 12:25 编辑 ]
 楼主| 发表于 2007-4-26 13:23:33 | 显示全部楼层
今天发放了上月的销售提成 1411 思明论坛!

   下次努力哦!……
委托是C#独有的新类型,我们若能够灵活运用委托便可以写出地道的C#代码,而想要灵活运用委托,就必须要弄懂委托的特性,下一讲我会通过两个简单的例子来展现委托的工作特性
回复

使用道具 举报

发表于 2007-4-26 13:24:07 | 显示全部楼层
不幸的你遭到暴徒洗劫!掳去了你 1/4的现金 !(人民政府再次提醒大家有钱要存银行)

   下次努力哦!……
:handshake

可惜偶从C++ 直接转到VB.net   JAVA 等了。.!!1
回复

使用道具 举报

 楼主| 发表于 2007-6-1 20:42:03 | 显示全部楼层
顶起来,第三讲——委托组播就要出啦:titter
回复

使用道具 举报

 楼主| 发表于 2007-6-1 20:43:08 | 显示全部楼层
原帖由 dv-Partner 于 2007-4-26 13:24 发表
:handshake

可惜偶从C++ 直接转到VB.net   JAVA 等了。.!!1

C++是底层高级语言的超级无敌霸王3000,C#是中层高级语言的超级无敌霸王3000
回复

使用道具 举报

发表于 2007-6-3 20:32:41 | 显示全部楼层
楼主你当这个版的版主吧,我正打算去当网络技术的版主
回复

使用道具 举报

 楼主| 发表于 2007-6-4 10:21:53 | 显示全部楼层
原帖由 眼里只有¥ 于 2007-6-3 20:32 发表
楼主你当这个版的版主吧,我正打算去当网络技术的版主

觉得当不当一样,不过你有此意的话倒是可以玩玩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入驻

本版积分规则

QQ|Archiver|手机版|小黑屋|思明论坛

GMT+8, 2024-9-28 15:22 , Processed in 0.062925 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表