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日

相关文章

  • NancyFx框架检测任务管理器详解

    NancyFx框架检测任务管理器详解 简介 NancyFx框架是一个轻量级的、无痛点的Web框架,它是一个Microsoft .NET平台上的开源项目。它非常简单易用,可以让你快速构建Web应用程序。 在本文中,我们将介绍如何使用NancyFx框架来检测任务管理器,并且详细地讲解这个过程。 步骤 以下是如何使用NancyFx框架来检测任务管理器的详细过程: …

    C# 2023年6月3日
    00
  • c# 断点续传的实现

    C# 断点续传的实现攻略 什么是断点续传 断点续传是指当网络传输中断或者用户主动暂停传输时,继续从中断或者暂停的地方继续传输,以达到复制大文件的目的。断点续传技术可以减少文件传输的时间,同时避免重复传输已经传输过的文件,减轻服务器负担,提高传输成功率和效率。 在 C# 中,我们可以通过一些类库和方法来实现断点续传功能。 实现断点续传的步骤 以下是基本的实现步…

    C# 2023年6月6日
    00
  • .NET中的枚举用法浅析

    当您在开发 .NET 应用程序时,经常需要在代码中表示一组已知的常量。 使用枚举就可以做到这一点。 在本攻略中,我们将讨论在 .NET 中的枚举用法,以及如何通过它实现正确的编码。 什么是枚举? 在 .NET 中,枚举是一种值类型,其主要用途是定义一系列命名常量,这些常量都属于同一类型。可以认为枚举是一种非常有用的语言结构,它允许我们为数字或字符串等值分配有…

    C# 2023年5月31日
    00
  • 详解ASP.NET配置文件Web.config

    下面是ASP.NET配置文件Web.config的详细讲解攻略: 什么是Web.config文件? Web.config是ASP.NET应用程序的配置文件,用于存储应用程序的配置信息。配置文件定义了应用程序的行为和特性,包括数据库连接、Session状态、HTTP模块、认证和授权等。 Web.config文件结构 Web.config文件的结构如下所示: &…

    C# 2023年6月3日
    00
  • C# wx获取token的基本方法

    C# wx获取token的基本方法 什么是Token? 在微信公众号开发中,Token是指在微信公众平台上,通过接口调用获取到的一个用于对当前公众号进行身份验证的字符串。 获取Token的基本方法 获取Token的基本方法是向微信服务器发送HTTP请求。发送请求的URL是: https://api.weixin.qq.com/cgi-bin/token?gr…

    C# 2023年5月31日
    00
  • C#面向对象编程中依赖反转原则的示例详解

    C#面向对象编程中依赖反转原则的示例详解 什么是依赖反转原则 依赖反转原则(DIP)是面向对象设计的重要原则之一。它的核心是:高层模块不应该依赖低层模块,而是共同依赖于抽象层。换句话说,具体的实现应该依赖于抽象定义。 通过这个原则,我们可以实现两个重要目标: 可替换性:由于高层模块和低层模块都依赖于抽象层,因此可以在满足接口规范的前提下,随时替换实现类。 解…

    C# 2023年6月1日
    00
  • 效控制C#中label输出文字的长度,自动换行

    效控制C#中label输出文字的长度,自动换行的方法: 使用AutoEllipsis属性 可以使用C#中的Label控件中的AutoEllipsis属性实现标签控件中输出文字的长度的控制。在Winform应用程序中,将AutoEllipsis属性设置为true即可实现标签文字长度过长时的自动省略号替换。示例代码如下: label1.AutoEllipsis …

    C# 2023年6月7日
    00
  • 详细分析ASP.NET Razor之C# 变量

    ASP.NET Razor是一种在.NET平台上构建Web应用程序的技术,其模板引擎支持C#编程,并提供了一些方便的快捷语法来简化代码书写。本文将详细讲解ASP.NET Razor之C#变量的使用方法以及示例说明。 1. 声明变量 在Razor模板中,可以使用@符号来声明一个C#变量,并将其输出到HTML。例如: @{ var name = "Al…

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