A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _xixi_ 中级黑马   /  2014-7-10 01:46  /  1284 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 _xixi_ 于 2014-7-11 13:11 编辑

以前看过委托,书本的一个例子给我的感觉是为什么非得去定义一个委托去调用一个方法,直接通过 实例名.方法 ,不是结果也一样;最近看了一些视频,有了新的一些想法,当一个行为会带动另外一个行为的时候,你要怎么用代码实现?所谓的一个行为带动另外一个行为,比如,你向银行申请贷款,申请成功后,银行发一条短信告诉你审批通过,看下面代码分析。

让我疑惑,觉得跟 实例名.方法 没什么区别的例子:
  1. namespace Delegate
  2. {
  3.     delegate void D(int x);

  4.     class C
  5.     {
  6.         public static void M1(int i)
  7.         {
  8.             Console.WriteLine("C.M1:" + i);
  9.         }
  10.     }

  11.     class Test
  12.     {
  13.         static void Main()
  14.         {
  15.             
  16.             D cd = new D(C.M1);
  17.             cd(-1);//输出“C.M1:-1”,结果与C.M1(-1)一样!!

  18.             //C.M1(-1);
  19.             Console.ReadKey();

  20.         }
  21.     }
  22. }

复制代码
向银行申请贷款的例子:

  1. namespace Delegate
  2. {
  3.     delegate void ApplyL(Bank bank, int money); //申请贷款
  4.     delegate void GiveM(Person person, int money);  //银行反馈的信息

  5.     class Person
  6.     {
  7.         string name = "张三";

  8.         public string Name
  9.         {
  10.             get { return name; }
  11.             set { name = value; }
  12.         }

  13.         //申请贷款
  14.         public void ApplyLoan(Bank bank, int money)
  15.         {
  16.             Console.WriteLine("{0}向{1}银行提出申请,贷款{2}元!", this.Name, bank.Name, money);

  17.             //银行反馈信息,调用Bank的方法
  18.             GiveM giveM = new GiveM(bank.GiveMessage);
  19.             giveM(this, money);
  20.         }
  21.     }

  22.     class Bank
  23.     {
  24.         string name = "XX";

  25.         public string Name
  26.         {
  27.             get { return name; }
  28.             set { name = value; }
  29.         }

  30.         //接受贷款请求
  31.         public void GiveMessage(Person person, int money)
  32.         {
  33.             if (person is Person)
  34.             {
  35.                 Console.WriteLine("{0},你在{1}银行贷款{2}元的申请成功!", ((Person)person).Name, this.Name, money);
  36.             }

  37.         }
  38.     }

  39.     class Program
  40.     {
  41.         static void Main(string[] args)
  42.         {
  43.             Person aPerson = new Person();
  44.             Bank aBank = new Bank();

  45.             ApplyL applyL = new ApplyL(aPerson.ApplyLoan); //向银行申请贷款
  46.             applyL(aBank, 100000);

  47.             Console.ReadKey();
  48.         }
  49.     }

复制代码


以上只是我的一些想法,请大家指教,多多交流!其实我还想知道在实际应用中委托多用来做什么?

a.jpg (14.9 KB, 下载次数: 19)

贷款操作运行结果

贷款操作运行结果

1 个回复

倒序浏览
应该理解错了→__→
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马