C#事件(event)练习题

C#面向对象案例之奥特曼打小怪兽_01 1案例需求: 2.具体实现代码: class Monster { public string name; public int hp; public int atk; public Monster(string name, int atk,int hp) { this.hp = hp; this.name = name; this.atk = atk; 阅读详情
作业一:

 1.英雄:大招1000,防御力为300,当英雄对怪物进行攻击时,怪物会做出反应;

 2.怪物:攻击力500,防御力400,当怪物对英雄进行攻击时,英雄会做出反应;

 3..如果a攻击力大于b的防御力,那a攻击b时,b会受伤害,否则就是避开

 4.一个英雄对象,4只怪物,怪物编号不同;

class Hero
    {
        //声明委托
        public delegate void HeroHandler(int a);
        //攻击事件
        public static event HeroHandler Hhit;
        private string name;//英雄名字
        private int attack = 1000;//攻击力为1000
        private int defense = 300;//防御力为300

        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public int Attack
        {
            get
            {
                return attack;
            }

            set
            {
                attack = value;
            }
        }

        public int Defense
        {
            get
            {
                return defense;
            }

            set
            {
                defense = value;
            }
        }

        public Hero(string name ) {
            this.Name = name;
            Monster.Mhit += Reaction;//怪物攻击绑定反应事件
        }
        /// <summary>
        /// 攻击方法
        /// </summary>
        public void Att() {
           
            //如果事件不为空 英雄被怪物攻击做出反应
            if (Hhit!=null) {
                Hhit(this.Attack);
            }
        }
        /// <summary>
        /// 被攻击做出反应
        /// </summary>
        /// <param name="monattack"></param>
        public void Reaction(int monattack) {
            if (monattack > Defense)//如果接收到的怪物的攻击大自身防御做出反应
            {

                Console.WriteLine("英雄"+Name+"受到伤害");
            }
            else {
                Console.WriteLine("避开");
            }
        }

    }
    class Monster
    {
        public delegate void MonHandler(int a);
        public static event MonHandler Mhit;
        private int id;//怪物编号
        private int attack = 500;
        private int defense = 400;

        public int Id
        {
            get
            {
                return id;
            }

            set
            {
                id = value;
            }
        }

        public int Attack
        {
            get
            {
                return attack;
            }

            set
            {
                attack = value;
            }
        }

        public int Defense
        {
            get
            {
                return defense;
            }

            set
            {
                defense = value;
            }
        }

        public Monster(int id) {
            this.Id = id;
            Hero.Hhit += Reaction;
        }
        /// <summary>
        /// 攻击
        /// </summary>
        /// <param name="attack"></param>
        public void Att()
        {
            
            if (Mhit != null)
            {
                Mhit(this.Attack);
            }
        }
        /// <summary>
        /// 受到攻击做出的反应
        /// </summary>
        /// <param name="herattack"></param>
        public void Reaction(int herattack) {
            if (herattack > Defense)
            {
                Console.WriteLine("怪物"+Id+"受到伤害");
            }
            else {
                Console.WriteLine("避开");
            }
        }
    }

输出结果




作业二:热水器

 烧水器,显示器,警报器

1.烧水器:负责烧水,温度会发生改变

2.随着温度发生改变,显示器显示的内容就发生改变;

3.当温度到达100时,发出警报声,停止烧水;

 /// <summary>
    /// 烧水器类
    /// </summary>
    class Boiler
    {
        public Boiler() {
            //与警报器绑定烧水停止事件
            Alarm.callHandler += Stop;
        }
        public delegate void WaterBhandler(int a);
        public static WaterBhandler Wathandler;
        private int tem = 35;//温度

        public int Tem
        {
            get
            {
                return tem;
            }

            set
            {
                tem = value;
            }
        }

        /// <summary>
        /// 将水倒入开始烧水
        /// </summary>
        /// <param name="tem"></param>
        public void WaterB() {
            Console.WriteLine("倒入温度为{0}的水",Tem);
            Console.WriteLine("正在烧水...");
            Tem += 65;//加热65度
            //如果事件不为空 
            if (Wathandler!=null) {

                Wathandler(Tem);//将温度传递给显示器和警报器
            }
        }
        /// <summary>
        /// 停止烧水
        /// </summary>
        public void Stop() {
            
            if (Alarm.callHandler!=null) {
                Console.WriteLine("停止烧水");
            }
        }

    }
    /// <summary>
    /// 显示器类
    /// </summary>
    class Display
    {
        public Display() {
            //与烧水器绑定
            Boiler.Wathandler += Show;
        }
        /// <summary>
        /// 
        ///同步显示温度 </summary>
        /// <param name="tem"></param>
        public void Show(int tem) {
            Console.WriteLine("显示温度"+tem);
        }

    }
    /// <summary>
    /// 警报器类
    /// </summary>
    class Alarm
    {
        public delegate void CallHandler();
        public static CallHandler callHandler;
        public Alarm() {
            //与烧水器绑定
            Boiler.Wathandler += Call;
        }
        /// <summary>
        /// 当温度达到100时警报响起
        /// </summary>
        /// <param name="tem"></param>
        public void Call(int tem) {
            if (tem>=100) {
                Console.WriteLine("警报响起dilidili");
                callHandler();//警报响起后停止烧水

            }
        }

    }

输出结果

 



C# 小练习(简单)-合集 从控制台输入一个三位数,在程序中分解这三位数,判断输入的三位数是否是水仙花数,并输出结果。水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:13 + 53+ 33 = 153) 阅读详情

相关推荐

C# 事件总线 Event Bus

事件总线:是对发布-订阅模式的一种实现,是一种集中式事件处理机制。它允许事件发送者(发布者)与事件接收者(订阅者)之间保持解耦,即它们不需要直接知道对方的存在,只需要通过事件总线进行通信。发布-订阅模式:是一种消息传递模式,消息发送者(称为发布者)不会将消息直接发送给特定的接收者。相反,发布者将发布的消息分类成不同的频道(Channel),不需要知道哪些消息接收者(称为订阅者)会存在或监听这些频道。首先,定义一个事件监听器接口,所有的事件监听器都需要实现这个接口。这个接口包含一个方法,用于处理事件。

学习和分享 2461

C# 有关事件的练习 内容

C# 事件 using System; //事件 //事件发生时,通知订阅者,就是调用订阅者的注册函数。 //注册,就是告诉发布者调用哪一个注册函数 //事件订阅 // NewDog +=方法 // NewDog -=方法 //方法可以是,实例方法,静态方法,匿名方法 Lambda表达式 //事件触发 // if(NewDog!=null){NewDog();} // // namespace 事件 { internal class Program { ...

laocooon的博客 587

C# 事件(Event)

C# 事件(Event)是一种成员,用于将特定的事件通知发送给订阅者。事件通常用于实现观察者模式,它允许一个对象将状态的变化通知其他对象,而不需要知道这些对象的细节。基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。C# 中使用事件机制实现线程间的通信。event+=-=

xiaoaque的博客 1253

c#语言经典程序100例,C#入门必看的实例程序100个 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...

C#入门必看的实例程序100个\实例01\01.bmpC#入门必看的实例程序100个\实例01\csc编译器路径.txtC#入门必看的实例程序100个\实例01\hello.csC#入门必看的实例程序100个\实例01\hello.exeC#入门必看的实例程序100个\实例01\HELLO.SLNC#入门必看的实例程序100个\实例01\HELLO.SUOC#入门必看的实例程序100个\实例01\...

weixin_39954682的博客 2569

C# 事件(Event)详解

定义委托类型:声明事件的委托类型。定义事件:使用event关键字声明事件。触发事件:通过委托触发事件。//声明委托类型//声明事件//触发事件的方法MyEvent?");//触发事件//事件处理方法//订阅事件//触发事件• 事件是基于委托的,提供了一个更严格的方式来管理方法的调用,尤其适用于需要通知和异步操作的场景。• 事件允许发布-订阅模式,使得多个对象能够订阅并响应特定的事件。

weixin_45034786的博客 2720

C#事件(event)解析

事件(event)   事件类似于异常,因为它们都是由对象引发(抛出),我们可以提供代码来处理事件。单它们也有区别,最重要的区别是并没有与try...catch 类似的结构来处理事件,而必须订阅(subscribe)它们。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称之为事件处理程序。所以在实际编程中,就必须有时间发生者和时间处理者,初次之外还有它们活动的平台。事件发生者

liuguobo的专栏 5920

委托的注册及注销+观察者模式

所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫做事件。一系列对象来监听另外一个对象的行为,被监听者一旦触发事件/发布消息,则被所有监听者收到,然后执行自己的行为。就是使用委托/事件,让一系列对象把他们的行为来注册到我的委托中去。委托变量如果公开出去,很不安全,外部可以随意调用。小花想在打铃时去打羽毛球。小明想在打铃的时候去买东西吃,2.只能自己去调用自己的委托。小红想在打铃时开始练习,小张想在打铃时去打水,

m0_74236534的博客 593

C#【高级篇】 C# 事件(Event)

C#【高级篇】 C# 事件(Event)

星Yeah 的博客 1026

C#重点内容之:事件(Event)

一、事件的五个组成部分 事件的五个部分: 事件拥有者(对象) 事件成员(Event ,成员) 事件的响应者(对象) 事件处理器(成员,本质是一个回调方法) 事件订阅——把事件处理器与事件关联在一起 二、几个重要例子说明事件的使用 1、时钟的例子 ◆问题提出:设置一个时钟,频率为1000毫秒,每隔1000毫秒就向控制台打印一行"hello,world"; 分析: 事...

weixin_34392435的博客 110

C#100个案例 C#100个案例

C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例C#100个案例 丰富,易懂

C#例题程序题含答案代码

C#例题程序题含答案代码,包含对索引器、委托、事件、类的继承、接口的映射、抽象类方法和接口方法的实现、异常等考察的习题

C# 事件(event)

在C#中,事件是通过event关键字声明的。事件通常基于委托类型,委托定义了事件的签名,即事件的参数和返回类型。事件的声明通常放在类的内部,作为类的一个成员。// 声明事件,基于MyEventHandler委托类型在这个示例中,我们定义了一个名为MyEventHandler的委托类型,它接受一个object类型的源对象和一个EventArgs类型的参数。然后,在MyClass类中,我们使用event关键字声明了一个名为MyEvent的事件,该事件基于MyEventHandler委托类型。

weixin_47336109的博客 8336

睿尔曼超轻量仿人机械臂--机械臂接口介绍

本文介绍了睿尔曼超轻量仿人机械臂的控制器接口及末端接口。

realman_Rop的博客 3439

C# 事件(event)

事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类)中对其进行调用。如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法可以将事件标记为publicprivateprotectedinternal或。这些访问修饰符定义该类的用户访问该事件的方式。事件在我们平时开发中用的还是比较多的,大部分时候用在框架中,比如 Winform 中的 Timer 组件,如下面代码,Timer.Elapsed 就是一个事件//实例化Timer类,

熊思雨的博客 7775

玉米群体遗传分析实战:如何用IQtree和VCF文件快速构建系统发育树(附避坑指南)

本文详细介绍了如何利用IQtree和VCF文件进行玉米群体遗传分析,并快速构建可靠的系统发育树。文章重点解析了从VCF格式转换到PHYLIP格式的实用技巧,强调了使用ASC模型校正SNP数据偏差的重要性,并提供了完整的参数设置、常见报错解决方案及结果评估指南,帮助研究者高效完成分析并规避常见陷阱。

leaf8的博客 608

机械臂速成小指南(七):从旋转矩阵到齐次变换——机械臂位姿的数学表达

本文详细介绍了机械臂位姿描述的数学基础,包括旋转矩阵、欧拉角和齐次变换等核心概念。通过解析旋转矩阵的几何意义和合成方法,以及欧拉角的直观描述,帮助读者理解机械臂位姿的数学表达。文章还探讨了齐次变换在工程实践中的应用,并提供了数值稳定性、坐标系约定和计算效率等实用建议。

cuda7parallel的博客 835

C#事件Event

CLR里提到这是线程不安全的做法,因为当我们判断不为空后,准备执行时,另一个线程将从委托链将委托移除,此时变成了空,引发NullReferenceException异常。第二、三种做法都是线程安全的,因为它通过一个临时委托变量(委托链保存了所有委托),通过上一篇对委托链的了解,我们知道对委托链进行Combine/Remove实际都会创建一个新的数组对象,此时对temp没有影响。我们知道委托是用来包装回调函数的,它的本质是一个class,回调函数的签名必须与委托的签名一致。

GarFe的博客 1436

【社招算法经验贴】算法社招记录

总的来说,也是收获了七七八八的offer,给的涨幅40~100%,职级有的可以对标到 p7(但阿里p7是真难a,a不动)。面了一圈下来,感觉大模型也在收缩hc。尤其是多模态相关hc。凭着上学期间做过相关视觉的work和paper,社招虽然能进面试,但是hc少得可怜,多模态已死慎入。还有大模型应用算法给的涨幅,跟搜广推的涨幅差别不大。真正能几百万往上的是基座pretrain/后训练/infra,但是全靠social和conn,hc极少。

Danger的博客 981

c# 事件(Event)机制

重新熟悉一下委托和事件。 通过事件使用委托 事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。 发布器(publisher) 是一个包含事件和委托定义的对象。事件和...

一颗偏执的心 1万+

【原创教程】西门子1500与施耐德伺服的通讯以及调试

该函数块主要描述伺服的手动,左边的引脚Forward是指伺服手动正转,Backward是指伺服手动反转,Fast是指手动的某个方向为快速运行,TipPos手册上描述为固定值,WaitTIme是指伺服手动的相应时间,VeloSlow指伺服手动正常慢速运动的速度,VeloFast指伺服手动快速运动的速度,Acceleration是指伺服手动的加速度,Decelertion是指伺服手动的减速度。该函数块用于伺服停止,左边的引脚Execute为伺服停止执行,Deceleration含义为减速,Axis为轴。

Qinmingyue13的博客 1375

YOLOv11改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

本文记录的是利用优化的目标检测方法研究。深度可分离卷积可以减少FLOPs,但会导致更高的内存访问,引起延迟并减慢整体计算。部分卷积利用逐点卷积处理通道冗余,减少模型计算量和内存访问量。Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks的实现代码如下: 四、创新模块 4.1 改进点⭐ 模块改进方法: 1️⃣ 加入。添加后如下:2️⃣:加入基于的。利用改进模块,减少通道冗余。改进代码如下:首先添加如下代码让加入,并重命名为 再添加如

Limiiiing的博客 3877

C# 事件Event

C#中的事件是基于委托的发布/订阅机制,具有封装性和安全性。事件只能在声明类内部触发,外部只能通过+=/-=订阅或取消订阅。通过示例展示了ToolMan类定义事件,LazyMan类订阅事件实现"带饭"功能,并指出直接调用事件会报错,需通过类方法触发。同时演示了水温报警和家庭开饭两个事件应用场景,说明Action委托的使用方式。事件机制有效实现了对象间的松耦合通信。

LZQqqqqo的博客 1150

FFMPEG音视频开发: Linux下采集音频(alsa-lib库)、视频(V4L2框架)数据编码并实时推流到RTMP流媒体服务器,达到直播功能(推流)

一、环境介绍 操作系统: VM虚拟机运行的ubuntu18.04 FFMPEG版本: 4.4.2 摄像头: 罗技USB摄像头、电脑自带摄像头 声卡:电脑自带声卡 二、FFMPEG、X264的安装 参考这里:FFMPEG开发: Linux下采集摄像头数据录制成MP4视频保存到本: 地https://blog.youkuaiyun.com/xiaolong1126626497/article/d...

2991

[C#]C# 事件(event)

事件是一种特殊的多播委托,仅可以从声明事件的类或结构中对其进行调用。类或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”。本文主要介绍C# 事件(event)。

FL1768317420的博客 1149

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1317

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: C#委托和事件基本概念
下一篇: C#泛型基本概念
zhong_0419
博客等级 码龄8年 30粉丝 40原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值