为对象添加事件&处理它
本文关键字:处理 事件 对象 添加 | 更新日期: 2023-09-27 17:53:13
我有一个内存流对象,它将在特定的时间间隔更新。
当内存流对象发生更新时,应该创建事件&提高。然后应该有一个事件处理程序来处理引发的事件。
请提供参考代码或示例
你知道事件的逻辑吗?
如果是,在类中创建一个事件,您的内存流将被更新。当更新它时,引发事件。
在类的消费者处注册事件。
基本上,就这样了?
也许你的怀疑是一般事件。为此,我建议您阅读MSDN,例如
有几种方法可以做到这一点。
最简单的方法是由那个家伙建议的,而不是直接调用MemoryStream. write(),在你的应用程序中编写一个方法来调用MemoryStream. write(),然后调用一个事件,你自己在MemoryStream对象之外声明。
在更奇特但更简洁的角落里,你可以大胆地从MemoryStream继承一个类,在那里你添加一个事件属性并覆盖Write()方法(或任何你调用来进行写入的方法)来调用基类Write()方法,然后引发事件。有些人可能会使用这种方法,它可能不太理想或有问题,这取决于你如何使用MemoryStream,但它会做你想要的工作,并使你不必在每次编写时自己引发事件。
关于注册和引发自定义事件的一个很好的示例可以在http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-custom-event-handlers
找到更新:链接断开了,我使用archive.org从那里引用(更改了事件引发部分以避免竞争条件):
using System;
namespace CustomEvents
{
public class Car
{
public delegate void OwnerChangedEventHandler(string newOwner);
public event OwnerChangedEventHandler OwnerChanged;
private string make;
private string model;
private int year;
private string owner;
public string CarMake
{
get { return this.make; }
set { this.make = value; }
}
public string CarModel
{
get { return this.model; }
set { this.model = value; }
}
public int CarYear
{
get { return this.year; }
set { this.year = value; }
}
public string CarOwner
{
get { return this.owner; }
set
{
this.owner = value;
// To avoid race condition
var ownerchanged = this.OwnerChanged;
if (ownerchanged != null)
ownerchanged(value);
}
}
public Car()
{
}
}
}