【问题标题】:declaring a vary generic class声明一个可变的泛型类
【发布时间】:2013-04-02 19:21:15
【问题描述】:

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

IButtonInputHandler<T> & INumericInputHandler<T>

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

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

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

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

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

【问题讨论】:

  • “构建类”是什么意思?您是否了解类型上可用的成员在编译时由 type 定义,而不依赖于执行时可用的任何内容? (当然你可以让一些成员抛出异常,但成员本身仍然会出现......)
  • 抱歉不清楚。该类不会在运行时生成。它是让其他程序员在他们的代码中使用他们选择的接口或接口的类
  • 我认为定义一个具有所需行为的接口

标签: c# .net generics dynamic


【解决方案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)
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 问题不在于输入接口的类型。我希望第三类能够使用一种类型的 IButtonInputHandler 或 INumericInputHandler 或两者,而不是让它使用两种类型的相同接口,即 ClassX 或 ClassX 或 ClassX跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2018-04-04
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多