下面是详细的“.net自定义事件示例分享”的攻略:
1. 简介
在 .NET 中,自定义事件是一种非常常见的编程模式,该模式便于构建松耦合、可扩展和可测试的代码。在 C# 中,使用以下语法创建自定义事件:
public event EventHandler<MyEventArgs> MyCustomEvent;
其中,MyCustomEvent
为事件名称,EventHandler<MyEventArgs>
为事件委托类型。需要注意的是,该事件委托类型必须符合以下模板:
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
where TEventArgs : EventArgs;
2. 示例说明
2.1 示例一
下面以一个简单的例子来说明如何创建自定义事件。假设我们有一个名为 Counter
的类,它可以对某个数字进行计数,并在计数到一定数量时触发一个自定义事件。
首先,我们定义一个继承自 EventArgs
的类,用于传递事件参数:
public class CountEventArgs : EventArgs
{
public int Count { get; set; }
public CountEventArgs(int count)
{
Count = count;
}
}
接着,我们在 Counter
类中定义一个自定义事件:
public class Counter
{
private int _count = 0;
public event EventHandler<CountEventArgs> CountReached;
public void Count()
{
_count++;
if (_count == 10)
{
CountReached?.Invoke(this, new CountEventArgs(_count));
}
}
}
其中 Count
方法用于进行计数,如果计数值 _count
等于 10,则触发自定义事件 CountReached
,并传递当前计数值。
最后,我们可以在其他类中订阅 CountReached
事件并相应处理:
public class Subscriber
{
private Counter _counter;
public Subscriber(Counter counter)
{
_counter = counter;
_counter.CountReached += Counter_CountReached;
}
private void Counter_CountReached(object sender, CountEventArgs e)
{
Console.WriteLine($"Count reached: {e.Count}");
}
}
2.2 示例二
下面再来一个稍微复杂一点的例子。假设我们现在要实现一个简单的订单系统,该系统可以添加订单并通知其他订阅者有新的订单添加。
首先,我们定义一个包含订单信息的类 Order
:
public class Order
{
public int OrderId { get; set; }
public string Product { get; set; }
}
接着,我们在 OrderSystem
类中定义一个自定义事件 OrderAdded
:
public class OrderSystem
{
private List<Order> _orders = new List<Order>();
public event EventHandler<OrderAddedEventArgs> OrderAdded;
public void AddOrder(Order order)
{
_orders.Add(order);
OrderAdded?.Invoke(this, new OrderAddedEventArgs(order));
}
}
在 AddOrder
方法中,我们首先将订单添加到 _orders
列表中,接着触发自定义事件 OrderAdded
并传递添加的订单作为参数。
最后,我们在订阅者中订阅 OrderAdded
事件并相应处理:
public class EmailNotifier
{
private OrderSystem _orderSystem;
public EmailNotifier(OrderSystem orderSystem)
{
_orderSystem = orderSystem;
_orderSystem.OrderAdded += OrderSystem_OrderAdded;
}
private void OrderSystem_OrderAdded(object sender, OrderAddedEventArgs e)
{
Console.WriteLine($"New order added: {e.Order.OrderId}, {e.Order.Product}");
}
}
在 OrderAdded
事件的处理方法中,我们可以获取订阅者传递的订单信息并进行相应处理,例如发送邮件通知。
3. 总结
自定义事件是 .NET 中非常常见的编程模式,适用于构建松耦合、可扩展和可测试的代码。在 C# 中,可以使用 EventHandler<TEventArgs>
委托类型和 event
关键字来定义自定义事件。在实际编程中,可以通过自定义事件来实现各种通知、触发和响应等功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net自定义事件示例分享 - Python技术站