Создать событие в классе Singleton - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть 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;
        }
    }
}

ссылка

Мой класс используетсясобирать данные GPS с промежуточного диска.Что я хочу, чтобы создать событие в классе Singleton, на который я могу подписаться?Например, MyClass.Instance.LocationChanged + = ...;

Любая помощь будет принята с благодарностью.

Mark

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

В чем проблема?

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 всякий раз, когда вы хотите запустить событие.

0 голосов
/ 16 декабря 2010

Вы должны быть в состоянии сделать это, как если бы вы были событием любого класса.

public event Action<object, EventArgs> LocationChanged;

тогда вы можете иметь защищенный виртуальный метод, такой как:

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

Youможет запустить ваш метод OnLocationChanged там, где вам нужно, и событие, которое вы прикрепили, сделает свое дело.

...