当前位置: 首页 > news >正文

建设b2b2c网站报告/中国最新新闻

建设b2b2c网站报告,中国最新新闻,摄影设计说明300字,网站建设做的人多吗知道C#的“委托”名词很久了,一直都没有需求去了解它,最近因为要写的系统以及nbpm萌生了了解它的想法。 初步看了一下委托,第一感觉委托本质上就是C/C中的函数指针。不同的是委托是面向对象,其构造更复杂和灵活,但…

      知道C#的“委托”名词很久了,一直都没有需求去了解它,最近因为要写的系统以及nbpm萌生了了解它的想法。
      初步看了一下委托,第一感觉委托本质上就是C/C++中的函数指针。不同的是委托是面向对象,其构造更复杂和灵活,但掌握了之后使用更方便。同时函数指针只能是静态方法,而委托可以是静态方法,也可以是实例方法。
      委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。
一、基本用法:
      委托最基本的概念和方法使用下面的例子应该很明了:

 1None.gifusing System;
 2None.gifnamespace 委托
 3ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 4InBlock.gif  delegate int NumOpe(int a,int b); //委托声明
 5InBlock.gif  class Class1
 6ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
 7InBlock.gif    static void Main(string[] args)
 8ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 9InBlock.gif      Class1 c1 = new Class1();
10InBlock.gif      NumOpe p1 = new NumOpe(c1.Add); //委托实例化
11InBlock.gif      Console.WriteLine(p1(1,2)); //委托调用
12InBlock.gif      Console.ReadLine();
13ExpandedSubBlockEnd.gif    }

14InBlock.gif    private int Add(int num1,int num2)
15ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
16InBlock.gif      return(num1+num2);
17ExpandedSubBlockEnd.gif    }

18ExpandedSubBlockEnd.gif  }

19ExpandedBlockEnd.gif}

      例中,委托NumOpe引用了方法Add。
      委托声明了以后,就可以象类一样进行实例化,实例化时把要引用的方法(如:Add)做为参数,这样委托和方法就关联了起来,就可以用委托来引用方法了。
      委托和所引用的方法必须保持一致:
      1、参数个数、类型、顺序必须完全一致。
      2、返回值必须一致。
二、委托的应用-事件
      委托的一个最常用的应用就是事件。
      事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。
      比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:
      this.button1.Click += new System.EventHandler(this.button1_Click);
      按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库里已经声明的一个委托。
三、自定义事件及其处理
      自定义事件是更委托的复杂的应用。
      EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:
      delegate void 事件委托名(object sender,EventArgs e);
      object用来传递事件的发生者,比如二中的Button控件就是一个事件发生者;EventArgs用来传递事件的细节。
      下面是两个例子:
      例程二:

 1None.gifusing System;
 2None.gifnamespace 最简单的自定义事件
 3ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 4ExpandedSubBlockStart.gifContractedSubBlock.gif  /**//// <summary>
 5InBlock.gif  /// 事件发送类
 6ExpandedSubBlockEnd.gif  /// </summary>

 7InBlock.gif  class Class1
 8ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
 9InBlock.gif    public delegate void UserRequest(object sender,EventArgs e); //定义委托
10InBlock.gif    public event UserRequest OnUserRequest; //定义一个委托类型的事件
11InBlock.gif    public void run()
12ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
13InBlock.gif      while(true)
14ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
15InBlock.gif        if(Console.ReadLine()=="a")
16ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{//事件监听
17InBlock.gif          OnUserRequest(this,new EventArgs()); //产生事件
18ExpandedSubBlockEnd.gif        }

19ExpandedSubBlockEnd.gif      }

20ExpandedSubBlockEnd.gif    }

21ExpandedSubBlockEnd.gif  }

22ExpandedSubBlockStart.gifContractedSubBlock.gif  /**//// <summary>
23InBlock.gif  /// 事件接收类
24ExpandedSubBlockEnd.gif  /// </summary>

25InBlock.gif  class Class2
26ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
27InBlock.gif    static void Main(string[] args)
28ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
29InBlock.gif      Class1 c1 = new Class1();
30InBlock.gif      c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest); //委托实例化后绑定到事件
31InBlock.gif      c1.run();
32ExpandedSubBlockEnd.gif    }

33InBlock.gif    private static void c1_OnUserRequest(object sender, EventArgs e)
34ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{//事件处理方法
35InBlock.gif      Console.WriteLine("\t你触发了事件!");
36ExpandedSubBlockEnd.gif    }

37ExpandedSubBlockEnd.gif  }

38ExpandedBlockEnd.gif}

      例程三:

 1None.gifusing System;
 2None.gifnamespace 带事件数据的事件
 3ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 4ExpandedSubBlockStart.gifContractedSubBlock.gif  /**//// <summary>
 5InBlock.gif  /// 带事件数据的事件类,从EventArgs继承
 6ExpandedSubBlockEnd.gif  /// </summary>

 7InBlock.gif  class OnUserRequestEventArgs:EventArgs
 8ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
 9InBlock.gif    private string inputText;
10InBlock.gif    public string InputText
11ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
12InBlock.gif      get
13ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
14InBlock.gif        return inputText;
15ExpandedSubBlockEnd.gif      }

16InBlock.gif      set
17ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
18InBlock.gif        inputText = value;
19ExpandedSubBlockEnd.gif      }

20ExpandedSubBlockEnd.gif    }

21ExpandedSubBlockEnd.gif  }

22ExpandedSubBlockStart.gifContractedSubBlock.gif  /**//// <summary>
23InBlock.gif  /// 事件发送类
24ExpandedSubBlockEnd.gif  /// </summary>

25InBlock.gif  class Class1
26ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
27InBlock.gif    public delegate void UserRequest(object sender,OnUserRequestEventArgs e);
28InBlock.gif    public event UserRequest OnUserRequest;
29InBlock.gif    public void run()
30ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
31InBlock.gif      while(true)
32ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
33InBlock.gif        Console.WriteLine("请输入内容:");
34InBlock.gif        string a=Console.ReadLine();
35InBlock.gif        //if(a=="a")
36InBlock.gif        //{
37InBlock.gif        OnUserRequestEventArgs e1 = new OnUserRequestEventArgs();
38InBlock.gif        e1.InputText = a;
39InBlock.gif        OnUserRequest(this,e1);
40InBlock.gif        //}
41ExpandedSubBlockEnd.gif      }

42ExpandedSubBlockEnd.gif    }

43ExpandedSubBlockEnd.gif  }

44ExpandedSubBlockStart.gifContractedSubBlock.gif  /**//// <summary>
45InBlock.gif  /// 事件接收类
46ExpandedSubBlockEnd.gif  /// </summary>

47InBlock.gif  class Class2
48ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
49InBlock.gif    [STAThread]
50InBlock.gif    static void Main(string[] args)
51ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
52InBlock.gif      Class1 c1 = new Class1();
53InBlock.gif      c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest);
54InBlock.gif      c1.run();
55ExpandedSubBlockEnd.gif    }

56InBlock.gif    private static void c1_OnUserRequest(object sender, OnUserRequestEventArgs e)
57ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
58InBlock.gif      Console.WriteLine("\t你输入的是:"+e.InputText);
59ExpandedSubBlockEnd.gif    }

60ExpandedSubBlockEnd.gif  }

61ExpandedBlockEnd.gif}
四、什么时候用委托: 
  • 当封装静态方法可取时。
  • 当使用事件设计模式时。
  • 当调用主不需要访问实现该方法的对象中的其他属性、方法或接口时
  • 需要方便的组合时。
  • 当类可能需要该方法的多个实现时。

转载于:https://www.cnblogs.com/badwood316/archive/2007/06/06/773443.html

http://www.lbrq.cn/news/951157.html

相关文章:

  • o2o网站系统/深圳百度快速排名提升
  • 建造网站需要什么/企业邮箱域名
  • 制作网站程序/seo都用在哪些网站
  • 学前端好找工作吗/seo和sem的概念
  • wordpress调用媒体库/seo网站推广的主要目的
  • 无法登录wordpress/青岛网站seo
  • 何炅做的代言网站/互联网营销软件
  • 免费的个人简历模板电子版/广州百度快速排名优化
  • 科技型中小企业怎么认定/安徽网站关键词优化
  • 建站公司上海/百度旧版本下载
  • 如何做一个企业的网站/长沙疫情最新消息
  • 专业建设网站服务公司/关键词排名霸屏代做
  • 大城县企业网站建设/环球网疫情最新动态
  • 旅游网站模块分类/营销策划培训
  • 网站制作.com语言/谷歌 chrome 浏览器
  • 企业做淘宝客网站有哪些/网络推广外包代理
  • 凡科做的网站可以在百度搜到吗/培训心得体会500字
  • 中国消防日/seo营销推广服务公司
  • 兵团建设环保局网站/网站建设关键词排名
  • 广州海珠做网站/网站推广的基本方法是
  • 宁波高端网站建设联系方式/百度关键词价格查询
  • 卡当网站建设/西安seo引擎搜索优化
  • 做搜索引擎网站/北京度seo排名
  • 南阳做网站公司哪家好/图片外链上传网站
  • wordpress文章页面添加广告/seo合作代理
  • 网站制作报价/九江seo公司
  • 如何在人力资源网站做合同续签/hao123上网从这里开始官方
  • 做昆特牌的网站/网站搜索优化官网
  • 优秀网页案例/东莞百度seo关键词优化
  • 网站制作上哪学校/百度推广官网网站
  • 在github上搭建自己主页
  • C语言-字符串数组
  • 模型系列(篇一)-Bert
  • GoLang教程005:switch分支
  • 创建一个触发csrf的恶意html
  • Linux系统中全名、用户名、主机名的区别