2013-04-10 73 views
2

在我的项目中我有2个接口。声明一个不同的通用类

IButtonInputHandler<T> & INumericInputHandler<T>

现在我想创建一个类,获取第一界面\第二接口\他们与暴露基于它们的类型的方法。例如,如果我使用IButtonInputHandler<Buttons>INumericInputHandler<Scroller>构建类,我想公开两个接收Button和Scroller对象的函数。

如果我只用IButtonInputHandler<Keys>构建类,我想公开一个将接收Buttons对象的函数。

要清楚 - 如果我离开使用2种选项动态我的课会是这样:

Class<T>和方法将返回T.

基本上我需要的灵活性,有时使用1型,有时使用2种类型。

+3

你所说的“打造一流”是什么意思?你知道一个类型的可用成员在编译时由* type *定义,而不依赖于执行时可用的任何东西吗? (当然可以让一些成员抛出异常,但成员本身仍然存在...) – 2013-04-10 19:20:09

+0

抱歉不清楚。 该类不会在运行时生成。它是让其他程序员在他们的代码中使用它们的接口或接口的代码 – 2013-04-10 19:24:06

+0

我认为定义了一个接口,该接口具有期望的行为 – 2013-04-10 19:35:08

回答

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,但是当添加多个约束时没有OR选项。

你需要做的是创建一个T必须实现的第三接口(或基类)。为了您的原来的例子,如果ButtonsScroller都实现IInputs你可以宣布你的接口,

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

public interface INumericInputHandler<T> where T : IInputs 
{ 

} 
+0

问题不在于输入接口的类型。 我想第三类是能够使用IButtonInputHandler或INumericInputHandler或两者的一种类型,而不是让它使用相同的接口的两种类型 即 ClassX 或ClassX 或ClassX 2013-04-11 16:13:57