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#创建Windows服务与服务的安装、卸载

    下面将为你详细讲解“C#创建Windows服务与服务的安装、卸载”的完整攻略。 1. 创建 Windows 服务 1.1 使用 Visual Studio 创建服务项目 打开 Visual Studio,选择“文件”-“新建”-“项目”,在“新建项目”窗口中选择“Windows 服务”项目模板,点击“确定”按钮创建项目。 1.2 设计服务程序 服务程序类必须…

    C# 2023年6月3日
    00
  • C#中Cookie之存储对象

    C#中Cookie之存储对象 在C#中,可以使用Cookie对象来存储客户端数据,如用户的登录信息等。那么,在C#中如何使用Cookie来存储对象呢? 1. 创建Cookie对象并存储对象 首先,需要创建Cookie对象,然后将待存储的对象转换为Json字符串。可以使用Json.Net等工具来进行转换。 以一个自定义的Person类为例: public cl…

    C# 2023年5月31日
    00
  • 浅谈C#多线程下的调优

    浅谈C#多线程下的调优 为什么要进行多线程调优 在C#应用中使用多线程可以提高应用性能,但是在多线程应用中容易出现许多问题,包括内存泄漏、死锁和竞争条件等问题。因此,在进行多线程编程时,需要考虑许多问题,如线程安全、同步和互斥等。进行多线程调优可以让应用程序更加稳定和正确地运行。 多线程调优方法 1. 同步机制 在多线程编程中,同步机制是必不可少的。因为多个…

    C# 2023年5月15日
    00
  • ASP.NET Core MVC 从入门到精通之布局

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月22日
    00
  • 详解C#中HttpClient的用法及相关问题的解决方法

    详解C#中HttpClient的用法及相关问题的解决方法 什么是HttpClient? HttpClient是一种可以使C#开发人员轻松使用HTTP协议进行Web服务交互的类。它是.NET框架的一部分,在System.Net.Http命名空间中,可以用于发送HTTP请求到一个URI并获取响应内容。 HttpClient的用法 创建HttpClient对象 要…

    C# 2023年5月14日
    00
  • 如何利用C#打印九九乘法表

    下面是详细的攻略: 如何利用C#打印九九乘法表 1. 概述 九九乘法表是学习基础数学的必修课程之一,在程序员的日常工作中,也常常需要用到九九乘法表。利用C#编程语言打印九九乘法表是一项基础练习。 2. 实现方法 要实现打印九九乘法表,我们可以使用嵌套循环来实现。具体步骤如下: 使用两层for循环嵌套,外层循环控制输出的行数,内层循环控制输出该行的列数; 每次…

    C# 2023年6月6日
    00
  • Unity 数据存储和读取的方法汇总

    下面是关于Unity数据存储和读取方法的详细攻略,我们将涉及两种常见的数据存储和读取方法:PlayerPrefs和Json文件。 PlayerPrefs PlayerPrefs是Unity内置的一种数据存储方式,它使用键值对来存储和读取数据。在使用PlayerPrefs时,需要指定一个键(Key)和一个值(Value)。下面是一个使用PlayerPrefs存…

    C# 2023年6月3日
    00
  • C#保存上传来的图片示例代码

    C#保存上传来的图片是一项常见的操作,下面是一个完整的攻略说明: 1.前置条件 在进行C#保存上传来的图片的操作时,首先我们需要创建一个ASP.NET Web应用程序。创建完成后,我们需要在Web.config配置文件中设置文件上传的相关参数: <system.web> <httpRuntime maxRequestLength=&quot…

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