Реализация абстрактной фабрики с использованием универсального класса и интерфейса - PullRequest
0 голосов
/ 09 мая 2018

Я хочу реализовать абстрактную фабрику (с одиночными) и использовать ее в своем коде с конкретными экземплярами TType и TInterfaceType, которые должны быть сопоставлены.

Вот мой текущий код:

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 голосов
/ 09 мая 2018

Вам нужно добавить ограничение о том, что TType должно наследоваться от TInterfaceType:

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

Теперь компилятор знает, что TType наследуется от TInterfaceType, и поэтому objectTtype может присваиваться (и возвращаться) для TInterfaceType.

...