c#学习笔记03——委托和事件

  • 委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法。类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内
    1. 定义和声明委托:

      1 delegate 返回值 委托名(参数列表);
      2 eg:
      3 public delegate void SayHelloDelegate(string name);
    2. 使用委托:委托其实通过返回值和参数列表来定义方法和签名。任何与委托具有相同返回值和参数列表(签名)的方法都可以赋给该委托。

      1 public delegate void SayHelloDelegate(string name);//声明委托
      2 public viod SayHelloEnglish(string name)//声明方法
      3 {
      4         Console.WriteLine("Hello,{0}",name);
      5 }
      6 SayHelloDelegate s=SayHelloEnglish;//把方法赋予委托对象

      委托实例化的几种形式:

       1 1.使用new关键字
       2 SayHelloDelegate s=new SayHelloDelegate(SayHelloEnglish);
       3 2.直接赋值
       4 SayHelloDelegate s=SayHelloEnglish;
       5 3.使用匿名方法
       6 SayHelloDelegate s=delegate(string name)
       7 {
       8          Console.WriteLine("Hello,{0}",name);
       9 }
      10 4.使用Lambda表达式,例如:
      11 SayHelloDelegate s=name=>
      12 {
      13          Console.WriteLine("Hello,{0}",name);
      14 }
      1 委托实例化后,就可以像调用方法一样调用委托。eg:
      2 s("John");
    3. 多播委托:一个委托对象可以包含多个方法。调用多播委托时,按赋值的顺序一次执行每个方法。
      1. 使用运算符+实现:委托对象的一个有用属性,可以使用+运算符将多个对象分配给一个委托实例。这里运算符+操作对象只能是委托对象,不能使方法签名。

         1 public delegate void SayHelloDelegate(string name);
         2 public void SayHelloEnglish(string name)
         3 {
         4        Console.WriteLine("Hello,{0}",name);
         5 }
         6 public void SayHelloChinese(string name);
         7 {
         8         Console.WriteLine("你好,{0}",name);
         9 }
        10 SayHelloDelegate s1=new SayHelloDelegate(SayHelloEnglish);
        11 SayHelloDelegate s2=SayHelloChinese;
        12 SayHelloDelegate s3=s1+s2;//操作符两边只能是委托对象

      2. 使用运算符+=

         1 public delegate void SayHelloDelegate(string name);
         2 public void SayHelloEnglish(string name)
         3 {
         4        Console.WriteLine("Hello,{0}",name);
         5 }
         6 public void SayHelloChinese(string name);
         7 {
         8         Console.WriteLine("你好,{0}",name);
         9 }
        10 SayHelloDelegate s=new SayHelloDelegate(SayHelloEnglish);
        11 SayHelloDelegate s+=SayHelloChinese;//右边的操作对象是方法签名

时间: 2024-08-06 20:03:41

c#学习笔记03——委托和事件的相关文章

[读书笔记]C#学习笔记二: 委托和事件的用法及不同.

前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针来实现对函数的操作. 委托的定义和方法的定义类似, 只是在定义的前面多了一个delegate关键字. 正文: 委托可以被视为一个更高级的指针,它不仅仅能把地址传指向另一个函数,而且还能传递参数,返回值等多个信息. 系统还为委托对象自动生成了同步,异步的调用方式,开发人员使用BeginInvoke,E

python学习笔记(03):函数

默认参数值:   只有在行参表末尾的哪些参数可以有默认参数值,即 def func(a, b=5 )#有效的 def func( a=5,b )#无效的 关键参数: #!/usr/bin/python # Filename: func_key.py def func(a, b=5, c=10): print 'a is', a, 'and b is', b, 'and c is', c func(3, 7) func(25, c=24) func(c=50, a=100) #输出: $ pyth

HTTP 学习笔记03

通用信息头 Cache-Control : no-cache(不缓存当前请求) [*] Connection:close(返回当前请求后立即断开)[*] Date:...(HTTP消息产生的时间) Pragma:no-cache (不缓存) [*] Trailer:Date(哪些能放到实体内容后的头字段) Transfer-Encoding:chunked (指定传输编码方式)[*] Upgrade:HTTP/2.0,SHTTP/1.3 (支持的版本) Via:HTTP/1.1 Proxy1,H

C++ GUI Qt4学习笔记03

C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QMainWindow可以创建一个窗口 图形用户界面(GUI)应用程序通常会使用很多的图片,最常见的为应用程序提供图片的方法是使用Qt的资源机制(resource mechanism) 使用Qt资源系统,必须创建一个资源文件,并且在识别该资源文件的.pro文件中添加一行代码. RESOURCES = spr

mongodb 学习笔记 03 -- 查询表达式

mongodb 学习笔记 03 – 查询表达式 不等于,大于,小于 !=: db.stu.find({name:{$ne:'billvsme'}}) 名字不是'billvsme' > : db.stu.find({age:{$gt:18}}) 年纪大于18 < : db.stu.find({age:{$lt:18}}) 年纪小于18 >=: $gte <=: $lte in/not in/all $in :db.goods.find(stu_id:{$in:[93001,93002

Android自定义View学习笔记03

Android自定义View学习笔记03 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值.这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明.半透明颜色(Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as w

SWIFT学习笔记03

1.断言 let age = -3 assert(age >= 0, "A person's age cannot be less than zero") // 因为 age < 0,所以断言会触发 2.Swift赋值符(=)不返回值,以防止把想要判断相等运算符(==)的地方写成赋值符导致的错误.数值运算符(+,-,*,/,%等)会检测并不允许值溢出. 3.在对负数b求余时,b的符号会被忽略.这意味着 a % b 和 a % -b的结果是相同的,但-a是不一样的. 4.不同

HTML学习笔记03

HTML学习笔记03 一.HTML标题 HTML标题通过<h1>-<h6>等标签进行定义的,<h1>定义最大的标题,<h6>定义最小的标题. 二.HTML水平线 HTML水平线可以用<hr>标签. 三.HTML注释 HTML注释采用设置<!--注释-->进行注释. 四.HTML段落 HTML段落采用<p>标签,还可以使用<br>标签进行换行. 五.文本格式化 <b>定义粗体文本,<big>

【OpenGL 学习笔记03】点画多边形

1.点画多边形 //定义填充多边形的点画模式.mask为32 x 32 的位图指针,1画0不画,使用前必须启用多边形点画功能 void glPloygonStipple(const GLubyte* mask); //绘制一个矩形 void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2); 2.示例 #include <GL/glut.h> #include <stdlib.h> void display(void) { G