为对象添加事件&处理它

本文关键字:处理 事件 对象 添加 | 更新日期: 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()
    {
    }
  }
}