C# 事件的继承

C# 关于窗体继承后,控件事件触发两次的问题解决办法 有时多个窗体功能相同,控件繁多,重新布局费时费力,因此可以利用窗体继承来实现相似功能的窗体。但是在继承窗体后,我们会发现触发继承窗体上的控件时,被继承窗体的相应的控件也会被触发一次。这是因为继承窗体总是会执行被继承窗体的虚方法。 比如form2继承自form1,form1中有一个button,那么相应的form2中也会有一个button,如果我们仅是触发form2中button的click事件的话,form1的button的click也会被触发。 看下面这个例子 private void button1_C 阅读详情
    public class BaseBusiness
    {
        //声明事件委托
        public delegate void ProgressEventHandler(int progress, string msg);
        
//声明事件
        public event ProgressEventHandler ProgressEvent;
    }

派生类:
    public class MyBusiness : BaseBusiness
    {
        public MyBusiness()
        {
            
this.ProgressEvent(30,"Testing...");
        }
    }

编译时提示如下错误:   
事件“BaseBusiness.ProgressEvent”只能出现在 += 或 -= 的左边(从类型“BaseBusiness”中使用时除外) 

出现编译错误的原因是:
事件只能从声明它们的类中调用,派生类不能直接调用在基类声明的事件。

要处理基类的事件,通常通过在基类中为事件创建受保护虚方法(OnEventName)来实现。派生类可以重写基类的OnEventName方法,也可以直接调用基类的OnEventName方法,从而实现调用基类的事件。重写基类的OnEventName方法,派生类可以截获基类正在调用的事件,对这些事件执行它自己的处理。

修改后的代码如下:
基类:

    public class BaseBusiness
    {
        //声明事件委托
        public delegate void ProgressEventHandler(int progress, string msg);
        
//声明事件
        public event ProgressEventHandler ProgressEvent;

        protected virtual void OnProgress(int progress, string msg)
        {
            
if (this.ProgressEvent != null)
                
this.ProgressEvent(progress, msg);
        }

    }

派生类:
    public class MyBusiness : BaseBusiness
    {
        public MyBusiness()
        {
            //  可以直接调用基类的方法
            this.OnProgress(this.OnProgressValue, "Testing...");            
        }

        //  可以重写基类的方法
        protected override void OnProgress(int progress, string msg)
        {
            
// 在这里添加其他处理代码
            base.OnProgress(progress, msg);
        }

    }
2021-8-14 EDK II编译 2021-8-14 EDK II 编译为什么要写这篇文章新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇文章 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo 阅读详情

相关推荐

海康工业相机SDK+OpenCV实战:图像采集与Mat格式转换优化指南

本文深入探讨了如何高效利用海康工业相机SDK与OpenCV进行图像采集与处理。重点解析了从相机RawData到OpenCV Mat格式转换的核心优化技巧,包括像素格式匹配、内存零拷贝管理以及彩色图像BGR/RGB转换,旨在解决工业应用中常见的性能瓶颈与内存问题,构建稳定高效的图像处理流程。

weixin_29192211的博客 108

第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)

14.1、委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托。委托是一个类型,是一个函数指针类型,这个类型将该委托的实例化对象所能指向的函数的细节封装起来了,即规定了所能指向的函数的签名,也就是限制了所能指向的函数的参数和返回值。当实例化委托的时候,委托对象会指向某一个匹配的函数,实质就是将函数的地址赋值给了该委托的对象,然后就可以通过该委托对象来调用所指向的函数了。利用委托,程序...

2万+

江科大笔记—OLED调试工具

OLED介绍及调试工具

m0_62005595的博客 655

cstimothy202122-事件详解

020,021,022 事件详解 · 语雀 委托类型字段≠事件 事件是1种类型的成员 事件是1种使对象或类具备通知能力的成员 事件用于对象或类间的动作协调和信息传递(信息推送) 事件的订阅者=事件的响应者 =事件消息的接收者=事件的处理者=被事件所通知的对象 事件参数=事件信息EventArgs =事件消息=事件数据 事件处理器Event Handler 事件的功能=通知+可选的事件参数(即详细信息) 对象O拥有1个事件E-当事件E发生时,O有能力通知别的对象 ..

A240428037的博客 610

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 364

C#事件

C#事件 ++分析猫和老鼠示例 ++++假如有一只猫叫Tom,有两只老鼠Jerry和Jack,Tom只要叫一声喵,我是Tom。 两只老鼠就会说,老猫来了,快跑。 ++++分析上面的案例,有几个类,如何处理类与类之间的关系? ++++猫和老鼠 -- 1、至少存在两个类,Cat和Mouse -- 2、在Cat类中存在一个方法,叫Shout。 -- 3、当Shout方法触发时,Mo

VRunSoftYanlz的博客 4242

C# Modbus通信从入门到精通(2)——Modbus RTU协议原理

本文详细的介绍了Modbus RTU协议的原理,由多年经验高级工程师实战总结而成,绝对干货!

qq_34059233的博客 6383

C#中事件的继承

C#中的子类无法调用父类的事件,可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。 class parent { protected string name; public event Handle OnEvent; protected SendEvent(HandleArgs args) { if (OnEvent != null

new_smile的专栏 1026

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3794

基于SAHI算法优化YOLOv8的小目标检测性能研究

SAHI(SliceAwareHyperInference)是一种推理优化算法,通过将大图切片为小块并分别推理的方式,实现更精细的小目标检测。提升小目标检测精度:切片后的小目标在每个小块中占比更大,模型能够更好地聚焦。兼容性强:可直接集成到现有目标检测框架中(如YOLO系列、Detectron2等)。支持大分辨率图片和视频推理:减少硬件对大图推理的限制。本文详细探讨了如何通过SAHI(切片辅助超推理算法)结合YOLOv8模型,有效提升小目标检测性能,尤其是在高分辨率图片和视频场景中表现优异。

博客 2371

zy77_C#中的自定义事件以及事件程序中的继承

zy77_C#中的自定义事件以及事件程序中的继承

weixin_47149785的博客 1090

yolov8涨点系列之轻量化主干网络替换

yolov8涨点系列之轻量化主干网络替换,以EfficientVit为例

zhang1379的博客 2887

学点C# 4 继承 & 事件

继承:相当于 extends & implementsbase相当于super选择构造函数“:base()” publicclass ColorCoOrds : CoOrds { public System.Drawing.Color color; public ColorCoOrds() : base () { color = System.Drawing.Color.Red; } public ColorCoOrds(int

xingguo822的专栏 636

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c#事件的继承处理

有下面一段代码,目的是实现事件的继承:  基类:     public class BaseBusiness     {         //声明事件委托         public delegate void ProgressEventHandler(int progress, string msg);         //声明事件         public event 

等一个人的咖啡 1414

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#继承多个接口,每个接口都定义了同样名字的事件,怎么办?

我们在学校里,就已经知道一个事实: C#允许单继承,多实现。每个C#类,都只能有一个父类,该父类可以具体类也可以是抽象类,但只能一个父类,可是C#却是允许实现N个接口的。 本文问题:如果这N个接口,都定义了同样的一个名称的事件,然后C#类都实现了这些接口,这些接口中同名的事件名称,会不会引发冲突,不会的话又是怎么处理的? 一、会不会只算一个事件? 嗯,你可以把它当成一个事件,等于是合并了。 如上图,合并成一个后,该事件就是“家庭”类的了。 二、那么我要单独使用各自的事件怎么办? 如果.

C#开发 1344

c#中的继承、委托、事件

在visual studio开发环境中新建一个网站,打开默认的Default.aspx.cs文件,把下列代码覆盖原文件 CodeusingSystem;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Security;usingSy...

dongfeikai5669的博客 563

C#中事件的继承.

C#中的子类无法调用父类的事件,可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。 class parent { protected string name; public event Handle OnEvent; protected SendEvent(HandleArgs args) { if (OnEvent != ...

weixin_30468137的博客 176

c# 窗体继承子窗体按钮触发父窗体事件

c#的winform中,子窗体继承父窗体,但是子窗体按钮点击的时候或者子窗体的其他事件触发后,父窗体的对应事件也会被触发。 有一个现象是子窗体在继承父窗体的情况下,子窗体中对应的控件无法修改名称,这也就导致了后来的原因。 窗体的按钮或者其他控件都继承自System.Windows.Forms.Control类,其中也就包含了按钮的click事件,而按钮也就继承了click这个事件的字段,而常说的事件无法继承主要讲的是事件的触发或者实现,而按钮继承control类之后,后续的方法可以对click事...

link750的博客 2694
上一篇: .net自带wsdl.exe的用法与参数说明
下一篇: The database has local access protection and you are not authorized to access it locally
onlyjohn
博客等级 码龄18年 17粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值