c#学习笔记2-委托
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Demo
{
class Demo9
{
//static void Main(string[] args)
//{ // A a = new A();
// B b = new B(a);
// C c = new C(a);
// a.Fall();
// Console.ReadLine(); //}
} /// <summary>
/// 首领A举杯委托
/// </summary>
/// <param name="hand">手:左、右</param>
public delegate void RaiseEventHandler(string hand);
/// <summary>
/// 首领A摔杯委托
/// </summary>
public delegate void FallEventHandler();
/// <summary>
/// 首领A
/// </summary>
public class A
{
/// <summary>
/// 首领A举杯事件
/// </summary>
public event RaiseEventHandler RaiseEvent;
/// <summary>
/// 首领A摔杯事件
/// </summary>
public event FallEventHandler FallEvent; /// <summary>
/// 举杯
/// </summary>
/// <param name="hand">手:左、右</param>
public void Raise(string hand)
{
Console.WriteLine("A{0} is ready", hand);
// 调用举杯事件,传入左或右手作为参数
if (RaiseEvent != null)
{
RaiseEvent(hand);
}
}
/// <summary>
/// 摔杯
/// </summary>
public void Fall()
{
Console.WriteLine("A is goods");
// 调用摔杯事件
if (FallEvent != null)
{
FallEvent();
}
}
}
/// <summary>
/// 部下B
/// </summary>
public class B
{
A a; public B(A a)
{
this.a = a;
a.RaiseEvent += new RaiseEventHandler(a_RaiseEvent); // 订阅举杯事件
a.FallEvent += new FallEventHandler(a_FallEvent); // 订阅摔杯事件
}
/// <summary>
/// 首领举杯时的动作
/// </summary>
/// <param name="hand">若首领A左手举杯,则B攻击</param>
void a_RaiseEvent(string hand)
{
if (hand.Equals("left"))
{
Attack();
}
} /// <summary>
/// 首领摔杯时的动作
/// </summary>
void a_FallEvent()
{
Attack();
} /// <summary>
/// 攻击
/// </summary>
public void Attack()
{
Console.WriteLine("b attack");
}
}
/// <summary>
/// 部下C
/// </summary>
public class C
{
A a;
public C(A a)
{
this.a = a;
a.RaiseEvent += new RaiseEventHandler(a_RaiseEvent); // 订阅举杯事件
a.FallEvent += new FallEventHandler(a_FallEvent); // 订阅摔杯事件
}
/// <summary>
/// 首领举杯时的动作
/// </summary>
/// <param name="hand">若首领A右手举杯,则攻击</param>
void a_RaiseEvent(string hand)
{
if (hand.Equals("right"))
{
Attack();
}
} /// <summary>
/// 首领摔杯时的动作
/// </summary>
void a_FallEvent()
{
Attack();
}
/// <summary>
/// 攻击
/// </summary>
public void Attack()
{
Console.WriteLine("c attack");
}
}
}
c#学习笔记2-委托的更多相关文章
- 《C# 语言学习笔记》——委托
委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明制定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量 ...
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
前言: C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...
- [C#学习笔记]Func委托与Action委托
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...
- js学习笔记-事件委托
通过事件委托,你可以把事件处理器绑定到父元素上,避免了把事件处理器添加到多个子级元素上.从而优化性能. 事件代理用到了事件冒泡和目标元素.而任何一个元素的目标元素都是一开始的那个元素. 这里首先要注意 ...
- 【c# 学习笔记】委托链的使用
委托链其实就是委托类型,只是委托链把多个委托链接在一起而已,也就是说,我们把链接了多个方法的委托称为委托链或多路广播委托.如下: public delegate void DelegateTest() ...
- 【c# 学习笔记】委托的使用
//委托使用的演示 class Program { //1.使用delegate关键字来定义一个委托类型 public delegate void MyDelegate(int para1, int ...
- c#学习笔记之委托
委托 最近自己在调试C#项目,发现经常可以看到委托和lambda表达式,各种花里胡哨的写法把我给整的云里雾里的,于是自己特意花了一点功夫来整理关于delegate的相关知识,方便自己日后查阅. 何为委 ...
- c#学习笔记03——委托和事件
委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法.类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内. 定义和声明委托: deleg ...
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
- C#委托与事件学习笔记
委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...
随机推荐
- 7.学习springmvc的异常处理
一.页面的异常处理流程 二.建立项目springmvc04_exception 1.编写index.jsp页面: <%@ page contentType="text/html;cha ...
- 第04组alpha冲刺(3/4)
队名:斗地组 组长博客:地址 作业博客:Alpha冲刺(3/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.收集各个组员的进度 2.写博客 展示GitHub当日代码/文档签入记录: 接下 ...
- uniapp登录流程详解uni.login
uni.login(OBJECT)登录 H5平台登陆注意事项: 微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见普通浏览器上实现微信登陆,并非开放API,需要向 ...
- rancher2基础环境配置
一.主机配置 1.配置要求 参考节点要求 2.主机名配置 因为K8S的规定,主机名只支持包含 - 和 .(中横线和点)两种特殊符号,并且主机名不能出现重复. 3.Hosts 配置每台主机的hosts( ...
- 【转】gdb typeid 详解
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型, ...
- [技术博客]采用Qthread实现多线程连接等待
采用Qthread实现多线程连接等待 本组的安卓自动化测试软件中,在测试开始前需要进行连接设备的操作,如下图左侧的按钮 后端MonkeyRunner相关操作的程序中提供了connect() ...
- enable device: BAR 0 [mem 0x00000000-0x003fffff] not claimed
/******************************************************************************* * enable device: BA ...
- Video Architecture Search
Video Architecture Search 2019-10-20 06:48:26 This blog is from: https://ai.googleblog.com/2019/10/v ...
- clickhouse 19.14.m.n简单测试
ClickHouse is a column-oriented database management system (DBMS) for online analytical processing o ...
- 多线程高效合作之master-warker模式
对于高并发的任务,有些任务是相互独立的,任务与任务之间没有依赖关系,因此可以采用 master - worker 模式. master 用于接受任务和分发任务给 worker,并将 worker 返回 ...