使用泛型 class 和接口实现抽象工厂

Implement abstract factory using generic class and interface

我想实现一个抽象工厂(使用单例)并在我的代码中使用它,并将其映射到 TTypeTInterfaceType 的具体实例。

这是我当前的代码:

public abstract class AbstractFactory<TType, TInterfaceType> where TType : new() where TInterfaceType : class
{
    private TInterfaceType objectTtype;
    public TInterfaceType getInstance()
    {
        try
        {
            if (objectTtype == null)
            {
                objectTtype = new TType();
            }

            return objectTtype;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
}

我收到一个错误:

Cannot implicitly coonvert type TType to TInterfaceType

如何使用 class 及其相应接口实现带有方法定义的抽象 class。例如我想按如下方式使用它:

ConcreteFactory : AbstractFactory<ConcreteClass, IConcreteClass>

您需要添加一个约束说明 TType 必须继承自 TInterfaceType:

public abstract class AbstractFactory<TType, TInterfaceType> 
            where TType : TInterfaceType, new()
            where TInterfaceType : class

现在编译器知道 TType 继承自 TInterfaceType,因此 objectTtype 可分配(并可返回)给 TInterfaceType