声明变化的泛型类

时间:2013-04-10 19:18:37

标签: c# .net generics dynamic

在我的项目中,我有2个接口。

IButtonInputHandler<T>&amp; INumericInputHandler<T>

现在我想创建一个获取第一个接口的类或第二个接口\两个接口,并根据它们的类型公开方法。例如,如果我使用IButtonInputHandler<Buttons>INumericInputHandler<Scroller>构建类,我想公开两个接收Button和Scroller对象的函数。

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

要明确 - 如果我保留选项以动态使用2种类型,我的类将是这样的:

Class<T>,该方法将返回T.

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

2 个答案:

答案 0 :(得分:1)

您需要使用constraints,但添加多个约束时没有OR选项。

您需要做的是创建T必须实现的第3个接口(或基类)。对于原始示例,如果ButtonsScroller都实现IInputs,则可以将接口声明为

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

public interface INumericInputHandler<T>  where T : IInputs
{

}

答案 1 :(得分: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)
}