C#事件中关于sender的用法解读

当我们定义一个事件时,必须要在事件的定义中指定sender参数。sender参数表示事件的触发者,用于在事件处理中判断事件的来源。

在事件的处理中,可以利用sender参数来获取事件的触发者,进行相应的处理。

下面我们通过代码示例来详细讲解C#事件中关于sender的用法。

示例1

public class MyEventArgs : EventArgs
{
    public string Message { get; set; }
}

public class MyClass
{
    public event EventHandler<MyEventArgs> MyEvent;

    public void OnMyEvent(string message)
    {
        MyEvent?.Invoke(this, new MyEventArgs { Message = message });
    }
}

public class Program
{
    static void Main(string[] args)
    {
        var myClass = new MyClass();

        myClass.MyEvent += MyClass_MyEvent;

        myClass.OnMyEvent("Hello World!");
    }

    private static void MyClass_MyEvent(object sender, MyEventArgs e)
    {
        Console.WriteLine($"Sender: {sender.GetHashCode()}");
        Console.WriteLine($"Message: {e.Message}");
    }
}

在这个示例中,定义了一个MyEventArgs类,表示事件数据,其中包含了Message属性。MyClass类中定义了一个MyEvent事件,事件触发时将会传递sender对象和事件数据对象MyEventArgs。MyClass类中还定义了OnMyEvent方法,用于触发事件。

在Program类的Main方法中,向MyEvent事件订阅了一个事件处理方法MyClass_MyEvent,并通过调用myClass.OnMyEvent方法来触发事件。

在MyClass_MyEvent方法中,通过sender参数获取到了事件的触发者对象,即MyClass实例对象。

示例2

public class Battery
{
    public event EventHandler BatteryChanged;

    private int _level;

    public int Level
    {
        get { return _level; }
        set
        {
            _level = value;

            if (BatteryChanged != null)
            {
                BatteryChanged(this, EventArgs.Empty);
            }
        }
    }
}

public class Program
{
    static void Main(string[] args)
    {
        var battery = new Battery();

        battery.BatteryChanged += Battery_BatteryChanged;

        battery.Level = 10;
    }

    static void Battery_BatteryChanged(object sender, EventArgs e)
    {
        var battery = (Battery)sender;
        Console.WriteLine($"Sender: {battery.GetHashCode()}");
        Console.WriteLine($"Level: {battery.Level}");
    }
}

在这个示例中,定义了一个Battery类,其中有一个事件BatteryChanged,用于触发电池电量变化时的事件,事件触发时将传递sender参数和一个空的EventArgs对象。

在Program类的Main方法中,向BatteryChanged事件订阅了一个事件处理方法Battery_BatteryChanged,并通过调用battery.Level来改变电池电量,以触发事件。

在Battery_BatteryChanged方法中,通过sender参数获取到了事件的触发者对象,即Battery实例对象,并获取了电量Level的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#事件中关于sender的用法解读 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • c# 生成随机时间的小例子

    下面是“c# 生成随机时间的小例子”的完整攻略。 需求分析 我们希望在c#中生成一些随机的时间点(可以是任意时间,也可以是在某个时间范围内的随机时间),以便在一些测试场景下使用。 根据需求,我们需要实现的功能如下: 生成指定个数的随机时间点 可以指定时间范围 生成的时间点要保证随机性 为了实现这些功能,我们可以使用c#提供的DateTime类型和Random…

    C# 2023年6月1日
    00
  • C# 对象持久化详解

    C# 对象持久化详解 什么是对象持久化 对象持久化是指将内存中的对象数据转换为持久化存储的数据,以便在程序关闭后仍然能够重新读取数据。这种方式常用于数据存储,包括关系数据库等。 C# 中的对象持久化 在 C# 中,我们可以使用多种方式实现对象持久化,最常用的方式是使用 Entity Framework 和 JSON 序列化。 使用 Entity Framew…

    C# 2023年5月31日
    00
  • C#使用round函数四舍五入的方法

    使用round()函数可以轻松实现C#四舍五入的功能。下面是使用round()函数四舍五入的方法的完整攻略: 1. round()函数用法 在C#中,round()函数是一个标准库函数,用于对数值进行四舍五入。该函数的语法如下: Math.Round(double value, int digits, MidpointRounding mode); 其中,v…

    C# 2023年6月8日
    00
  • 测试框架nunit之assertion断言使用详解

    测试框架NUnit之Assertion断言使用详解 什么是Assertion断言? Assertion断言在编程中通常被称为“断言”或“断言语句”,是一种旨在保证代码正在执行所期望的工作的技术。在测试代码中,Assertion断言通常用于验证测试是否按照预期执行。 如何使用Assertion断言? NUnit是一种广泛使用的测试框架,可以使用Assertio…

    C# 2023年5月15日
    00
  • C#中DataTable的创建与遍历实现

    下面是关于“C#中DataTable的创建与遍历实现”的完整攻略。 创建DataTable 在C#中可以使用DataTable类来创建数据表,可以通过DataTable的构造函数或表格的属性方法来构建数据表。 构造函数创建 使用DataTable的构造函数来创建数据表,首先要声明一个DataTable对象,然后使用new运算符创建数据表,比如: DataTa…

    C# 2023年6月1日
    00
  • 利用Aspose.Cells和Excel模板导出统计数据

    当需要将大量的统计数据导出并分发的时候,采用手动逐个生成的方式会非常耗时耗力。利用Aspose.Cells和Excel模板的方式可以有效地自动化生成,提高工作效率。下面我将详细讲解如何利用Aspose.Cells和Excel模板导出统计数据。 准备工作 安装Aspose.Cells 准备Excel模板 编写代码 首先需要在项目中添加Aspose.Cells的…

    C# 2023年5月31日
    00
  • c#关于JWT跨域身份验证的实现代码

    关于”C#关于JWT跨域身份验证的实现代码”的攻略,我们可以从以下几个方面展开讲解: 什么是JWT跨域身份验证 JWT的结构 使用C#实现JWT跨域身份验证 示例代码 什么是JWT跨域身份验证? 经典的客户端身份验证方法是Cookie和Session,但是该方法有一些缺陷。一个替代方案是JWT,它能够高效并安全地在客户端和服务器之间进行身份验证。JWT(JS…

    C# 2023年5月15日
    00
  • ASP.NET MVC通过勾选checkbox更改select的内容

    以下是“ASP.NET MVC通过勾选checkbox更改select的内容”的完整攻略: 什么是ASP.NET MVC通过勾选checkbox更改select内容 ASP.NET MVC通过勾选更改的内容是一种机制,允许开发人员在MVC视图页中使用jQuery根据勾的checkbox更改select的内容。这种制可以帮助开发人员更轻松地处理用户交互,并提高…

    C# 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部