C#程序设计 第3章C#面向对象编程
C# 程序设计 第3章 C#面向对象编程
委托和事件 委托的基本概念 委托的声明 立业知国田 女理解委托的概念, 多 夂掌握委托的定义 女掌握多播委托的使用 々能在编程中使用委托技术 2
2 委托和事件 委托的基本概念 委托的声明、实例化和调用 多播委托 理解委托的概念, 掌握委托的定义 掌握多播委托的使用 能在编程中使用委托技术
委托和事件 委托的基本概念
3 委托和事件 委托的基本概念
什么是委托 如何选择调用 哪种方法? public void GreetPeople(string name){ ∥做某些额外的事情,比如初始化之类, 此处略 EnglishGreeting(name); 分情况讨论 public void EnglishGreeting(stringme){ Console.WriteLine("Morning,"n swith(lang){ case英语: public void ChineseGreeting(string name) EnglishGreeting(name); Console.WriteLine("早上好,"+name; break; case中文: ChineseGreeting(name); break: int var=int.Parse("90"); 数据作为参数传递给方法 4
4 什么是委托 public void GreetPeople(string name) { // 做某些额外的事情,比如初始化之类,此处略 EnglishGreeting(name); } public void EnglishGreeting(string name) { Console.WriteLine("Morning, " + name); } public void ChineseGreeting(string name){ Console.WriteLine("早上好, " + name); } 如何选择调用 哪种方法? 分情况讨论 swith(lang){ case 英语: EnglishGreeting(name); break; case 中文: ChineseGreeting(name); break; int var = int.Parse(“90”); } . 数据作为参数传递给方法
什么是委托 问题 GreetPeople("张三"); ■ 如果某个方法要对另一个方法进行操作,能把第二个 方法作为参数传递给第一个方法吗? 如何定义该类型 public void GreetPeople(string name,MakeGreeting){ ∥做某些额外的事情,比如初始化之光,此处略 MakeGreeting(name), public void EnglishGreeting(string name){ Console.WriteLine("Morning,"name); public void ChineseGreeting(string name){ Console.WriteLine("早上好,"+name;
5 什么是委托 public void GreetPeople(string name, 类型 MakeGreeting) { // 做某些额外的事情,比如初始化之类,此处略 MakeGreeting(name); } public void EnglishGreeting(string name) { Console.WriteLine("Morning, " + name); } public void ChineseGreeting(string name){ Console.WriteLine("早上好, " + name); } 如何定义该类型 GreetPeople("张三"); . ▪ 如果某个方法要对另一个方法进行操作,能把第二个 方法作为参数传递给第一个方法吗?
定义委托2-1 如何表示方 public void EnglishGreeting(string name) 法的类型 public void ChineseGreeting(string name) 方法的签名 指定与委托匹 指定与委托 委托的定义语法 配的方法的返 回值类型 匹配的方法 的形参列表 [访问修饰符]delegate返回类型委托名(参数列表): public delegate void GreetingDelegate string name ) 6
6 定义委托 2-1 [访问修饰符] delegate 返回类型 委托名(参数列表); 委托的定义语法 public void EnglishGreeting (string name) public void ChineseGreeting (string name) 如何表示方 法的类型 方法的签名 public delegate void GreetingDelegate ( string name ) ; 指定与委托匹 配的方法的返 回值类型 指定与委托 匹配的方法 的形参列表
委托 委托的声明、实例化和调用
7 委托 委托的声明、实例化和调用
委托的声明 ■ 定义和使用委托有3个步骤,即声明、实例化和调用 ■可以在定义类的任何地方定义委托 ■声明委托类型就是告诉编译器这种类型代表了哪种 类型的方法 ■委托匹配方法中的参数可以是ref,out,params,在 声明委托的同时也必须指定参数的类型 8
8 委托的声明 ▪ 定义和使用委托有3个步骤,即声明、实例化和调用 ▪ 可以在定义类的任何地方定义委托 ▪ 声明委托类型就是告诉编译器这种类型代表了哪种 类型的方法 ▪ 委托匹配方法中的参数可以是ref, out, params,在 声明委托的同时也必须指定参数的类型
委托的实例化和调用 声明了委托后,需要创建委托的实例,然后调用 其方法 与委托的签名匹配的任何可访问类或结构中的 实例化: 方法(返回类型&参数列表) 委托名委托实例名=new委托名(匹配方法); 静态或实例方法 委托名委托实例名=匹配方法, 注意:方法名之后不要加括号
9 委托的实例化和调用 ▪ 声明了委托后,需要创建委托的实例,然后调用 其方法 ▪ 实例化: 委托名 委托实例名 = new 委托名(匹配方法); 委托名 委托实例名 = 匹配方法; 与委托的签名匹配的任何可访问类或结构中的 方法(返回类型&参数列表) 静态或实例方法 注意:方法名之后不要加括号
委托的实例化和调用 调用: ■委托实例名(实参列表); ■通过委托对象的名称(后面跟着要传递给委托的参数, 放在括号内)调用委托对象 ■委托对象是不可变的,即设置与它们匹配的签名后就不 能再更改签名了 ■但关联的方法可以重新指定 ■参数形式为ref,out,params时,在声明委托时也必须 显式指出参数类型 调用:委托实例名(参数列表); 10
10 委托的实例化和调用 ▪ 调用: ◼ 委托实例名(实参列表); ◼ 通过委托对象的名称(后面跟着要传递给委托的参数, 放在括号内)调用委托对象 ◼ 委托对象是不可变的,即设置与它们匹配的签名后就不 能再更改签名了 ◼ 但关联的方法可以重新指定 ◼ 参数形式为ref, out, params 时,在声明委托时也必须 显式指出参数类型 调用:委托实例名 (参数列表);