委托初步学习
来源:互联网 发布:软件行业协会会员费 编辑:程序博客网 时间:2024/04/28 05:07
//从第一个方法看到第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);
}
}
}
- 委托初步学习
- 线程的初步学习(委托的初步使用)
- 黑马程序员--委托与事件的初步学习
- unity学习之委托与事件的初步应用
- 初步了解委托
- 对委托的初步研究
- 学习委托
- 委托学习
- 委托学习
- 委托学习
- 委托学习
- 委托学习
- 委托学习
- 初步学习
- 初步学习
- C#委托及事件委托的初步理解
- C#委托及事件委托的初步理解(经典文章)
- 委托的初步理解和用法
- POJ 3026 Borg Maze
- Android开发环境搭建
- u盘无法格式法
- u盘无法格式法
- 健康生活
- 委托初步学习
- 编码
- sicily 1802 线段树
- 使用Sencha Designer来快速开发web用户界面 -- 初识Designer
- 明年你还爱我吗
- Latex相关资源汇总
- 八拜之交是指哪八拜?
- 需要解决的问题(不断更新)
- 整合SSH的简单例子