2013-04-10 5 views
2

В моем проекте у меня есть 2 интерфейса.Объявление класса общего класса

IButtonInputHandler<T> & INumericInputHandler<T>

Теперь я хочу, чтобы создать класс, который получает первый интерфейс \ второго интерфейса \ оба из них и предоставляют методы, основанные на их типах. Например, если я создаю класс с IButtonInputHandler<Buttons> и INumericInputHandler<Scroller>, я хочу выставить две функции, которые получают объекты Button и Scroller.

Если я создаю класс только с IButtonInputHandler<Keys>, я хочу выставить функцию, которая получит объект Buttons.

Чтобы было ясно - если я оставлю возможность использовать 2 типа динамически мой класс будет выглядеть следующим образом:

Class<T> и метод вернет Т.

В принципе мне нужна гибкость иногда использовать 1, а иногда и 2 типа.

+3

Что вы подразумеваете под «построить класс»? Понимаете ли вы, что члены, доступные в типе, определяются * типом * во время компиляции, а не зависят от чего-либо, доступного во время выполнения? (Вы можете заставить некоторых членов исключить исключение, но сами участники все равно будут присутствовать ...) –

+0

жаль, что не ясна. класс не генерируется во время выполнения. это позволить другим программистам использовать класс в своем коде с их выбором интерфейсов или интерфейсов. –

+0

Я думаю, что определение интерфейса, который имеет желаемое поведение для comp –

ответ

1

сделать три класса:

public class ButtonInputHandler<T> : IButtonInputHandler<T> 
{ 
    //implement IButtonInputHandler<T> here 
} 

public class NumericInputHandler<T> : INumericInputHandler<T> 
{ 
    //implement INumericInputHandler<T> here 
} 

public class ButtonAndNumericInputHandler<TButton, TNumeric> : 
    ButtonInputHandler<TButton>, INumericInputHandler<TNumeric> 
{ 
    //implement INumericInputHandler<TNumeric> here 
    //(the implementation for IButtonInputHandler<TButton> will be inherited) 
} 
1

Вам необходимо использовать constraints, однако при добавлении нескольких ограничений нет опции ИЛИ.

Что вам нужно сделать, это создать третий интерфейс (или базовый класс), который должен реализовывать T. Для вашего исходного примера, если Buttons и Scroller как реализовать IInputs вы можете объявить свои интерфейсы, как

public interface IButtonInputHandler<T> where T : IInputs 
{ 
} 

public interface INumericInputHandler<T> where T : IInputs 
{ 

} 
+0

Проблема заключается не в типе входных интерфейсов. я хочу, чтобы третий класс, чтобы иметь возможность использовать один тип из IButtonInputHandler или INumericInputHandler или оба из них и не позволяют ей использовать два вида одного и того же интерфейса т.е. ClassX или ClassX или ClassX

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