首页 后端开发 C#.Net教程 c#如何在程序中定义和使用自定义事件

c#如何在程序中定义和使用自定义事件

Mar 09, 2019 pm 04:50 PM
自定义事件

C#在程序中定义和使用自定义事件的方法:首先在类中定义事件;然后定义事件的参数;接着在TestClass中来引发事件;最后使用事件即可。

c#如何在程序中定义和使用自定义事件

C#在程序中定义和使用自定义事件的步骤有:首先在类中定义事件,然后再定义事件的参数,在TestClass中来引发事件最后使用事件

【推荐课程:C#教程

C#在程序中定义和使用自定义事件可以分为以下几个步骤:

步骤1:在类中定义事件

using System;
public class TestClass
{
    //....
    public event EventHandler TestEvent
}

步骤2:定义事件参数

注意:事件参数类TestEventArgs继承自System.EventArgs

using System;
public class TestEventArgs : EventArgs
{
    public TestEventArgs() : base() { }
 
    public string Message { get; set; }
}

步骤3:在TestClass 引发事件

public class TestClass
{
    // 这个方法引发事件
    public void RaiseTestEvent(string message)
    {
        if (TestEvent == null) return;
        TestEvent(this, new TestEventArgs { Message = message });
    }
    public event EventHandler TestEvent; 
}

步骤4:使用事件

class Program
{
    static void Main(string[] args)
    {
 
        TestClass tc = new TestClass();
        // 挂接事件处理方法
        tc.TestEvent += Tc_TestEvent;
         
        Console.WriteLine("按任意键引发事件");
        Console.ReadKey();        
        // 引发事件
        tc.RaiseTestEvent("通过事件参数传递的字符串");
         
        Console.WriteLine("按任意键退出");
        Console.ReadKey();
    }
    private static void Tc_TestEvent(object sender, EventArgs e)
    {
        // 将事件参数强制转换为TestEventArgs
        TestEventArgs te = (TestEventArgs)e;
        // 显示事件参数中的Message
        Console.WriteLine(te.Message);
    }
}

完整的程序如下

using System;
public class TestClass
{
    public void RaiseTestEvent(string message)
    {
        if (TestEvent == null) return;
        TestEvent(this, new TestEventArgs { Message = message });
    }
 
    public event EventHandler TestEvent; 
}
public class TestEventArgs : EventArgs
{
    public TestEventArgs() : base() { }
 
    public string Message { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
 
        TestClass tc = new TestClass();
        tc.TestEvent += Tc_TestEvent;
        Console.WriteLine("按任意键引发事件");
        Console.ReadKey();
        tc.RaiseTestEvent("通过事件参数传递的字符串");
        Console.WriteLine("按任意键退出");
        Console.ReadKey();
    }
    private static void Tc_TestEvent(object sender, EventArgs e)
    {
        TestEventArgs te = (TestEventArgs)e;
        Console.WriteLine(te.Message);
    }
}

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

以上是c#如何在程序中定义和使用自定义事件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1582
276
使用C#中的任务并行库(TPL) 使用C#中的任务并行库(TPL) Jul 31, 2025 am 07:56 AM

C#的TPL通过Task类简化并行任务处理。1.使用Task.Run()或Task.Factory.StartNew()启动任务,推荐前者;2.通过Task获取结果,并用await或.Result等待完成;3.用Task.WhenAll()并行执行多个任务,注意资源竞争;4.通过AggregateException处理异常,捕获后遍历具体错误;5.使用CancellationTokenSource取消任务,适用于超时或用户取消场景;同时需注意避免混合同步与异步代码,防止死锁问题。

如何在C#中连接到SQL Server数据库? 如何在C#中连接到SQL Server数据库? Jul 25, 2025 am 12:49 AM

要连接到SQLServer数据库,C#最常用的方式是使用ADO.NET中的SqlConnection类。1.需要安装Microsoft.Data.SqlClient包并引用命名空间;2.编写包含服务器地址、数据库名、认证信息的连接字符串;3.使用using和try-catch建立连接并执行查询,同时确保资源释放和异常处理;4.常见问题包括远程连接设置、防火墙配置、端口放行及登录权限等需逐一排查。

如何在C#中按行读取文本文件? 如何在C#中按行读取文本文件? Aug 02, 2025 am 06:52 AM

在C#中逐行读取文本文件的常见方法有两种:使用StreamReader和File.ReadLines()。1.使用StreamReader的ReadLine()方法适合处理大文件,通过循环逐行读取且内存友好,同时使用using确保资源释放;2.File.ReadLines()提供简洁代码,适用于仅需遍历一次的场景,支持延迟加载且可指定编码。若需多次访问文件内容,则推荐File.ReadAllLines()。两者默认自动识别编码,但为避免乱码,建议根据需要显式指定Encoding.UTF8、Enc

C#struct vs class绩效比较 C#struct vs class绩效比较 Aug 02, 2025 am 11:56 AM

struct不一定更快,性能取决于场景。struct是值类型,赋值复制整个结构,class是引用类型,赋值仅复制引用。struct通常分配在栈上,速度快但频繁传递大结构会增加复制开销,class分配在堆上涉及GC压力。小struct适合高性能和缓存友好场景,大struct应避免或用ref/in传递。struct数组内存紧凑利于缓存,class数组引用分散影响效率。优先用struct的场景:数据小、生命周期短、无需继承或虚方法。避免用struct的场景:结构大、复杂逻辑、需多态、频繁装箱、需共享状

C#中的静态关键字是什么? C#中的静态关键字是什么? Jul 30, 2025 am 02:24 AM

在C#中,static关键字用于定义属于类型本身的成员,无需实例化即可访问。1.静态变量被类的所有实例共享,适用于跟踪全局状态,如记录类的实例化次数;2.静态方法属于类而非对象,不能直接访问非静态成员,常用于工具类中的辅助函数;3.静态类不能被实例化,仅包含静态成员,适合组织无状态的实用方法,但无法继承或实现接口。使用时需注意内存管理和线程安全问题。

利用C#进行科学计算和数据分析 利用C#进行科学计算和数据分析 Aug 05, 2025 am 06:19 AM

C#canbeusedforscientificcomputinganddataanalysisbysettingupaproperenvironment,leveragingrelevantlibraries,andoptimizingperformance.First,installVisualStudioorVSCodewiththe.NETSDKasthefoundation.Next,useNuGetpackageslikeMath.NETNumericsforlinearalgebr

选择正确的C#收集类型以进行性能 选择正确的C#收集类型以进行性能 Aug 01, 2025 am 03:47 AM

选择合适的集合类型能显着提升C#程序性能。 1.频繁在中间插入或删除用LinkedList,2.快速查找用HashSet或Dictionary,3.元素数量固定优先用数组,4.需唯一值时选HashSet,5.查找频繁用Dictionary或SortedDictionary,6.多线程环境考虑ConcurrentBag或ConcurrentDictionary。

使用JSON和XML序列化C# 使用JSON和XML序列化C# Jul 31, 2025 am 04:12 AM

选择JSON还是XML取决于应用场景:1.用JSON的情况包括WebAPI返回数据、前端交互、现代服务通信、轻量级配置;2.用XML的情况包括遗留系统兼容、需要命名空间支持、文档型数据结构、企业级应用接口规范。C#中,.NETCore默认使用System.Text.Json进行JSON序列化,性能更优,支持格式化输出与空值保留;XML则通过XmlSerializer实现,适用于老项目,可自定义标签名和命名空间,但不支持循环引用,需手动处理或换用其他库。合理选择并配置序列化方式,有助于应对不同开发

See all articles