Это так же просто, как сделать это:
public class ProcessBassTypeClass : IProcessBaseType<BaseTypeV1>, IProcessBaseType<BaseTypeV2>, IProcessBaseType<BaseTypeV3>
{
public void Process(BaseTypeV1 baseType)
{
throw new NotImplementedException();
}
public void Process(BaseTypeV2 baseType)
{
throw new NotImplementedException();
}
public void Process(BaseTypeV3 baseType)
{
throw new NotImplementedException();
}
}
Альтернатива, которую вы можете рассмотреть, заключается в следующем:
public interface IProcessBaseType
{
void Process<T>(T baseType) where T : BaseTypeClass;
}
public class ProcessBassTypeClass : IProcessBaseType
{
public void Process<T>(T baseType) where T : BaseTypeClass
{
throw new NotImplementedException();
}
}
Это позволяет использовать любой объект типа BaseTypeClass
и позволяет Process
вызвать typeof(T)
, чтобы получить фактический тип во время выполнения.Полезно, если вы хотите динамически создать список доступных процессоров.
Вот простой пример того, как вы можете добавлять процессоры, специфичные для типа, во время выполнения при использовании второго примера кода:
public class ProcessBassTypeClass : IProcessBaseType
{
private Dictionary<Type, Delegate> _processors = new Dictionary<Type, Delegate>();
public void AttachProcessor<T>(Action<T> processor) where T : BaseTypeClass
{
_processors[typeof(T)] = processor;
}
public void Process<T>(T baseType) where T : BaseTypeClass
{
if (_processors.ContainsKey(typeof(T)))
{
((Action<T>)(_processors[typeof(T)])).Invoke(baseType);
}
else
{
throw new NotSupportedException();
}
}
}