【问题标题】:Create Event on Singleton Class在单例类上创建事件
【发布时间】:2010-12-16 23:00:49
【问题描述】:

我有一个使用遵循这种模式的单例类的 Windows Mobile 6.5 (.net cf 3.5):

public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

reference

我的班级曾经从中间驱动器收集 GPS 数据。我想要的是在我可以订阅的单例类上创建一个事件?例如。 MyClass.Instance.LocationChanged += ...;

任何帮助将不胜感激。

标记

【问题讨论】:

  • 小心,任何订阅事件的代码都必须显式地取消订阅它。否则会导致内存泄漏。

标签: c# compact-framework


【解决方案1】:

有什么问题?

public sealed class Singleton
{
  ... your code ...

  public delegate LocationChangedEventHandler(object sender, LocationChangedEventArgs ea);  

  public event LocationChangedEventHandler LocationChanged;

  private void OnLocationChanged(/* args */)
  {
    if (LocationChanged != null)
      LocationChanged(this, new LocationChangedEventArgs(/* args */);
  }
}

public class LocationChangedEventArgs : EventArgs
{
  // TODO: implement
}

只要您想触发事件,请致电 OnLocationChanged

【讨论】:

  • 你是不是少了一个代表面前的“空白”?
【解决方案2】:

你应该能够像在任何课程上的活动一样做到这一点。

public event Action<object, EventArgs> LocationChanged;

然后您可以拥有一个受保护的虚拟方法,例如:

protected virtual void OnLocationChanged(EventArgs args)
{
   if(LocationChanged != null)
   {
     LocationChanged(this, args);
   }
}

您也可以在任何需要的地方触发 OnLocationChanged 方法,并且您附加的事件将完成他们的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2017-12-18
    相关资源
    最近更新 更多