带有子泛型类型的通用工厂方法

3

我有一个类型为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>();
    } 

我该怎么做呢?

1个回答

7

你已经接近成功,只需将返回类型 (T) 定义为通用参数即可。

通过这个限制 T: InterfaceExecuter<TEntry, TExit>,你已经定义了通用类型 T 的结构,因此在实例化时不需要显式使用通用参数(编译器也不允许这样做)。

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

当然可以!但是,我需要像这样调用方法吗?this.Initiate<ConcreteExecuter<T1,T2>,T1, T2>() 在这种情况下,我应该传递结构类型两次,一次为ConcreteExecutor,另一次为Initiate方法。这正确吗? - Bruno Silva
1
是的,在两个地方都需要提供TEntry和TExit。 - vasil oreshenski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接