2014-02-07 7 views
0

То, что я хочу, это написать класс, который может отправить объект путем сериализации типа байту [] и в случае деаэриализации байта [] назад к объекту.Создать событие с общим типом

public interface ISource 
    { 
     event EventHandler<T> myevent; 
     void Send<T>(T dataToSend); 
    } 

Codeline не работает в компиляторе, но это то, что мне нужно.

Пример реализации:

public class Source : ISource 
{ 
    ISerialPort _port; 

    public Source (ISerialPort port) 
    { 
     _port = port; 
    } 

    public event EventHandler<T> myevent; 

    public void Send<T>(T dataToSend) 
    { 
     //Converts type to an Byte[] with Serialisation 
     //And send the Data 
     _port.Send(ConvertedByteArray); 
    } 
} 

Посыл часть работает без проблем, потому что я могу precify типа, когда призывающую отправляющий метод.

obj.Send<List<String>>(myList); 

Теперь я хочу создать другое направление (Byte [] -> T) с событием.

Чтобы указать значение EventDataType при подписке на событие в классе Source.

Есть ли элегантное решение?

Я не хочу, чтобы указать тип, как «общественный класс» потому что я хочу, что класс может принимать и отправлять различные OBJ/типы

С уважением rubiktubik

ответ

0

Вы должны указать T в Интерфейс Декларация и декларация классов.

interface ISource<T> where T : EventArgs 
{ 
    event EventHandler<T> MyEvent; 
    void Send<G>(G dataToSend); 
} 
public class Source<T> : ISource<T> where T : EventArgs 
{ 

    public event EventHandler<T> MyEvent; 

    public void Send<T>(T dataToSend) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Создание производного класса от EventArgs, чтобы перейти в.

Смежные вопросы