使用泛型类和接口

时间:2018-05-09 14:01:10

标签: c# abstract-class abstract-factory

我想实现一个抽象工厂(带有单例)并在我的代码中使用它,并将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;
        }
    }
}

我收到错误:

  

无法隐式将TType类型转换为TInterfaceType

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

ConcreteFactory : AbstractFactory<ConcreteClass, IConcreteClass>

1 个答案:

答案 0 :(得分:3)

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

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

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