【问题标题】:Generic factory method with sub generic types具有子泛型类型的泛型工厂方法
【发布时间】:2017-10-24 11:10:07
【问题描述】:

我有一个类型 InterfaceExecuter 定义了一个 Enter 和一个 Exit 类型,两者都是结构。 在另一个类中,我想创建一个方法来实例化实现我的接口的类,如下所示:

 public T<TEntry, TExit> Initiate<T<TEntry, TExit>>()
        where T: InterfaceExecuter<TEntry, TExit>, new()
        where TEntry:struct
        where TExit:struct
    {
        return new T<TEntry, TExit>();
    } 

我该怎么做?

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    你快到了,只需将返回类型 (T) 定义为泛型参数。

    有了这个约束T: InterfaceExecuter&lt;TEntry, TExit&gt;,你已经定义了泛型类型T的结构,所以你在实例化它时不需要显式使用泛型参数(编译器也不允许这样做)

    public T Initiate<T, TEntry, TExit>()
                where T: InterfaceExecuter<TEntry, TExit>, new()
                where TEntry:struct
                where TExit:struct
            {
                return new T();
            } 
    

    【讨论】:

    • 当然!但是,我需要这样调用方法吗? this.Initiate,T1, T2>() 在这种情况下,我应该将结构类型传递两次,一次用于 ConcreteExecutor,另一次用于 Initiate 方法。对吗?
    • 是的,您需要在两个地方都提供 TEntry 和 TExit。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多