【问题标题】:Implement abstract factory using generic class and interface使用泛型类和接口实现抽象工厂
【发布时间】:2018-05-09 14:01:10
【问题描述】:

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

【问题讨论】:

  • 请删除catch (Exception e) { throw e; }。这不仅无用而且有害,因为它破坏了堆栈跟踪。

标签: c# abstract-class abstract-factory


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 2018-08-12
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多