Общие Аргументы Событий В Интерфейсе - PullRequest
4 голосов
/ 22 февраля 2011

Я пытаюсь сохранить объект в общем классе EventArgs, но поскольку у EventHandler есть интерфейс, у меня возникают трудности с выполнением этого.Есть ли способ получить что-то подобное?

Мой класс EventArgs:

public class PositionChangedEventArgs<T>
{
   public PositionChangedEventArgs(byte position, T deviceArgs)
   {
       Position = position;
       DeviceArgs = deviceArgs;
   }

   public byte Position { get; private set; }
   public T DeviceArgs { get; private set; }
}

Используемый интерфейс:

public interface IMoveable
{
    event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}

Пример использования класса:

public class SomeDevice : IMoveable
{
   public event EventHandler<PositionChangedEventArgs<DeviceSpecificEventMessageArgs>> PositionChanged; //Compiler doesn't like this
}

Ответы [ 2 ]

9 голосов
/ 22 февраля 2011

Вам нужно изменить определение интерфейса на следующее:

public interface IMoveable<T>
{
    event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}

Вы можете использовать его, передав тип в интерфейс следующим образом:

public class SomeDevice : IMoveable<DeviceSpecificEventMessageArgs>
{
   public event EventHandler<PositionChangedEventArgs<DeviceSpecificEventMessageArgs>> PositionChanged; 
}
0 голосов
/ 22 февраля 2011

Это потому, что вы должны объявить интерфейс как общий:

public interface IMoveable<T>
{
    event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...