Итак, сначала у меня есть интерфейс свойств моей команды
public interface ICommandProperty<T, U>
{
Func<T> CreateCommand { get; set; }
Func<T, U> ParseResponse { get; set; }
}
Идея состоит в том, что я могу создать простой парсер, который принимает строку и возвращает IP-адрес, например.
Этот интерфейс затем используется в другом интерфейсе:
public interface IDeviceCommand
{
Func<ICommandProperty<object, object>> SetCommand
{
get;
set;
}
Func<ICommandProperty<object, object>> GetCommand
{
get;
set;
}
string Name { get; set; }
}
Возможно, я все делаю неправильно, но здесь у меня проблема. В настоящее время у меня есть универсальный интерфейс, объявленный с объектами, потому что я не могу найти способ их общей установки (IDeviceCommand не может быть универсальным по разным причинам).
Моя конкретная реализация выглядит так:
public class DeviceCommand:IDeviceCommand
{
public DeviceCommand(string name,Func<ICommandProperty<object,object>> Set,Func<ICommandProperty<object,object>> Get)
{
this.Name = name;
this.SetCommand = Set;
this.GetCommand = Get;
}
#region IDeviceCommand Members
public string Name
{
get;
set;
}
public object Value
{
get;
set;
}
public Func<ICommandProperty<object, object>> SetCommand
{
get;
set;
}
public Func<ICommandProperty<object, object>> GetCommand
{
get;
set;
}
#endregion
}
Я мог бы сделать DeviceCommand универсальным классом и использовать T, U в SetCommand и GetCommand, но тогда он не удовлетворяет интерфейсу IDeviceCommand, потому что Func<ICommandProperty<T,U>> isn't Func<ICommandProperty<object,object>>
Есть ли другой подход, который я должен использовать здесь. По сути, я пытаюсь создать указатель метода, который можно установить при создании экземпляра DeviceCommand.