当我们定义一个事件时,必须要在事件的定义中指定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技术站