//从第一个方法看到第9个方法, 看完就差不多了.
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
//定义委托, 它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
class P2
{
public GreetingDelegate gd3;
public event GreetingDelegate gd4;
//注意此方法, 它接受一个GreetingDelegate类型的方法作为参数
public void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
}
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, "+name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
//注意此方法, 它接受一个GreetingDelegate类型的方法作为参数
private static void GreetPeople(string name,GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
static void Main(string[] args)
{
//Method1();
//Method2();
//Method3();
//Method4();
//Method5();
//Method6();
//Method7();
//Method8();
Method9();
Console.ReadKey();
}
///
/// 9.事件也没有什么了不起的, 它是封装之后的委托类型的变量
/// 不过, 它只能在+=或-=的左边, 也不能直接调用
///
private static void Method9()
{
P2 p = new P2();
//这是是错误的,p.gd4只能出现在+=或-=的左边p.gd4 = new GreetingDelegate(EnglishGreeting);
p.gd4 += ChineseGreeting;
//同时的错误: p.GreetPeople("Jack", p.gd4);
}
///
/// 8.将委托封装在P2这个类里
/// 注意:此时的委托, 如是private,则外部无法访问, 如是public,则外部的赋值又可以随意赋值了.
///
private static void Method8()
{
P2 p = new P2();
p.gd3 = new GreetingDelegate(EnglishGreeting);
p.gd3 += ChineseGreeting;
p.GreetPeople("Jack", p.gd3);
}
///
/// 7.一般来说, GreetPeople和EnglishGreeting,ChineseGreeting不在一个类中.
///
private static void Method7()
{
GreetingDelegate gd1 = new GreetingDelegate(EnglishGreeting);
gd1 += ChineseGreeting;
P2 p = new P2();
p.GreetPeople("Jack", gd1);
}
///
/// 6.可以取消其中的一个方法
///
private static void Method6()
{
GreetingDelegate gd1 = new GreetingDelegate(EnglishGreeting);
gd1 += ChineseGreeting;
Console.WriteLine("绑定了两个方法!");
GreetPeople("Jack", gd1);
Console.WriteLine("取消了其中的一个方法");
gd1 -= ChineseGreeting;
GreetPeople("Jack", gd1);
}
///
/// 5.可以像类一样直接得到对象, 但是GreetingDelegate gd1=new GreetingDelegate();却是错误的;
///
private static void Method5()
{
GreetingDelegate gd1 = new GreetingDelegate(EnglishGreeting);
//错误的: GreetingDelegate gd2= new GreetingDelegate();
gd1 += ChineseGreeting;
gd1("Jack");
}
///
/// 4.可以不用那个中转的方法, 直接调用委托
///
private static void Method4()
{
GreetingDelegate gd1 = EnglishGreeting;
gd1 += ChineseGreeting;
gd1("Jack");
}
///
/// 3.委托最奇妙的地方: 一个委托类型的变量可以绑定多个方法, 调用委托时, 会依次调用这些方法
/// 注意:第一次是赋值的语法, 第二次是绑定的语法, 如果第一次就用+=, 则会出现"无效的表达式项"的编译错误
///
private static void Method3()
{
GreetingDelegate gd1 = EnglishGreeting;
gd1 += ChineseGreeting;
GreetPeople("Jack", gd1);
}
///
/// 2.既然委托定义了方法, 所以委托也可以接受方法的赋值
///
private static void Method2()
{
GreetingDelegate gd1 = EnglishGreeting;
GreetingDelegate gd2 = ChineseGreeting;
GreetPeople("Jack", gd1);
GreetPeople("老王", gd2);
}
///
/// 1.最简单的调用方式
///
private static void Method1()
{
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
}
}
}
分享到:
相关推荐
委托和回调函数是C#编程中的重要概念,尤其在处理异步操作和事件处理时非常常见。在这篇文章中,我们将深入探讨这两个概念,以及如何在实际编程中运用它们。 首先,我们来理解什么是委托。在C#中,委托是一种类型,...
"30个C#初步小程序"是一份精心设计的学习资源,旨在帮助新手快速入门。这些小程序不仅涵盖基础语法,还可能涉及面向对象编程、控制流、数据类型、函数等核心概念。 1. **基础语法**:C#是一种强类型的语言,每个...
这涉及到对被审计单位的初步了解,包括其业务性质、经营规模、组织结构、经营状况、经营风险、历史审计情况以及财务会计机构的运作。此外,会计师事务所还需要评估自身的独立性、胜任能力和保持应有谨慎的能力。在...
在委托代理问题中,通过贝叶斯方法来修正概率分布的重要性在于,它能够允许委托人在不完全信息的情况下,通过不断学习和更新信息来接近客观真实情况,从而设计出更高效的激励合同。这对于改善委托人和代理人之间的...
### 金融行业研究方法-投行案例学习(94):委托加工模式解决之道 #### 案例背景 本案例研究了金融行业中一种常见的业务模式——委托加工模式,并以启源装备作为具体案例进行深入分析。该模式下,企业在产品生产的...
在本学习笔记中,我们将深入探讨Spring Security的核心概念和配置,以及如何设计数据库表来支持权限管理。 首先,Spring Security的配置始于Web应用的入口点——`web.xml`文件。在这里,我们需要定义一个名为`...
本文主要分析了合同中的关键条款和注意事项,适用于课件学习和实际操作。 1. **总则**:协议的基础是双方的友好合作和互利原则。这表明合同的目的是建立一个双赢的合作关系,双方应秉持诚信和公平的态度执行合同。 ...
c#0基础学习书籍 电子档 第1章 Visual C# 2008初步 第2章 C#编程必备知识 第3章 C#编程必备知识(二) 第4章 用面向对象的方法 第5章 父子关系—继承 第6章 索引器、委托和事件 第7章 调试、测试和异常处理 第8章 用...
对于初学者来说,这样的文档可以帮助他们建立初步的概念框架,并激发进一步深入学习的兴趣。 文件列表中提及的“SCCE.exe”可能是一个可执行文件,可能是作者为了辅助学习而编写的程序或者一个教学示例。由于未提供...
通俗易懂,本书主要面向希望初步掌握Visual C# 2008编码能力的读者。帮助读者了解C#基本程序结构以及C#内置数据类型、面向对象思想、以及使用Visual C# 2008进行面向对象编程的基本方法。此外,还帮助读者掌握范型,...
**jQuery初步** jQuery是一款强大的JavaScript库,它极大地简化了JavaScript代码的编写,使得网页动态交互变得更加简单。这个压缩包文件“jQuery_API.mxp”可能是为了帮助用户了解和使用jQuery API而设计的一个教学...
【初步接触客户的技巧】 在IT行业中,无论是销售技术产品还是提供技术服务...不断学习和实践这些方法,将有助于提升销售业绩和客户满意度。同时,随着市场的变化和技术的进步,适时调整和优化这些策略也是非常必要的。
《C#语言ASP.NET v2.0 开发初步》作为一本全面而实用的教程,不仅覆盖了ASP.NET 2.0的基础知识和技术要点,还涉及了许多高级话题,适合不同程度的学习者阅读。无论是想要快速入门还是进一步提升技能,本书都能够提供...
* 初步设计图纸、设备材料表和有关技术文件 * 通信建设工程概算定额及编制说明 * 通信建设工程费用定额及有关文件 * 建设项目所在地政府发布的土地征用和赔补费用等有关规定 三、通信工程概预算的编制方法 * 收集...
总结来说,"C#语言多线程初步理解"这个主题涵盖了线程创建、线程安全、线程同步以及在WinForm应用中的实践。通过深入学习和实践这些概念,开发者可以编写出更加高效和响应迅速的应用程序。在“WindowsForms...
这一部分可能继续深入探讨C#的特性,比如接口、委托、匿名方法、LINQ(Language Integrated Query)等,这些在实际开发中非常常用,能够提高代码的可读性和可维护性。 4. **第4章 用面向对象的方法.ppt** 面向...
整个培训分为初步学习期和技能提升期两个阶段。 初步学习期主要关注员工的基本素质和行业知识的初步掌握。在1个月的实习期内,新员工将经历工作适应期,通过7-10天的考核,确定是否适合从事房产中介工作。此阶段,...
通过这个简单的例子,新手可以对 iOS 开发有一个初步的认识。 接着,教程深入介绍 iOS 编程的基础知识,包括 InterfaceBuilder 的使用、头文件和实现文件的作用,以及触摸和点击事件的处理机制。这部分内容对于理解...
初读课文后,学生应能识别出文中涉及的动物角色,如老虎、狗熊等,并理解故事的大致情节,即老虎委托狗熊发布开会通知,而狗熊在通知中不断犯错的过程。 在第二课时,教师会引导学生更深入地探究课文,例如,让学生...
.NET框架是微软推出的一种全新的编程模型,旨在提供一个统一的面向对象环境,它与C++的结合使得开发者能够在C++...通过学习和应用.NET框架,C++开发者可以充分利用这些优势,创建出跨平台、高效且易于管理的应用程序。