2015-01-23 5 views
1

Я хочу создать базовый класс, который имеет несколько методов по умолчанию. Этот базовый класс должен использовать общий интерфейс.Общий базовый класс с общим интерфейсом

Возможно ли это? (Потому что код, ниже пример не компилируется, проблема заключается в T1, T2, T3 -> первая линия)

public abstract class ServiceBase<T> where T: IService<T1,T2,T3> 
{ 
    public abstract IEnumerable<T3> Search(T1 query); 

    public abstract T3 Add(T2 input); 

    public bool Monitor() 
    { 
     return true; 
    } 
} 

Причины я хочу использовать это, для службы, я могу набрать:

public class WhatEverService : ServiceBase<IWhatEverService> 

с IWhatEverService наследованием от IService < T1, T2, T3 > (с T1, T2, T3 некоторыми различными типами)

FYI:

public interface IWhatEverService: IService<WhatEverType1, WhatEverType2, WhatEverType3> 
+0

Кто-нибудь знает, что нужно сделать, не пропуская 4 параметра? – RubenHerman

ответ

2

Вы не сказали компилятору, что такое T1, T2 и T3, и он не может вывести эти типы из использования.

public abstract class ServiceBase<T,T1,T2,T3> where T : IService<T1,T2,T3> 
+0

Это действительно скомпилировано, но в этом случае мне нужно наследовать из ServiceBase . Точка 3 типов уже определены внутри IWhatEverService – RubenHerman

+0

На части 'IService ' вы сообщаете компилятору, что общий интерфейс IService будет иметь общие аргументы типов T1, T2 и T3. Но вы не сказали компилятору, что такое T1, T2 и T3. Единственный способ сообщить компилятору «не беспокоиться о T1, T2, T3» объявляет их вместе с именем класса. –