Использование класса Concrete в качестве параметра типа для унаследованного базового класса - PullRequest
0 голосов
/ 06 октября 2011

У меня есть базовый класс со следующей подписью

public class ReportViewModelBaseDTO<VT,DT>

и конкретными классами, подобными этим

public class ChartViewModelDTO:ReportViewModelBaseDTO<ChartViewModel,ChartViewModelDTO>

У меня вопрос, я знаю, что параметр второго типа моей родовой базыкласс должен быть типом конкретного класса.Я не хочу повторяться все время, называя класс, а затем повторяя это имя в качестве параметра типа.

Есть ли способ, чтобы мой базовый базовый класс принял фактический конкретный класс в качестве paramaeter типа?Кто-нибудь есть какие-либо предложения о лучших способах сделать это?

РЕДАКТИРОВАТЬ:

пример того, как я хочу использовать DT ниже.Я создаю экземпляр типа DT от одного из типов VT через Automapper.

public static DT Create(VT viewModel)
        {
            return Mapper.Map<VT,DT>(viewModel);   
        }

1 Ответ

1 голос
/ 06 октября 2011

Это то, что вы имеете в виду?

public class ReportViewModelBaseDTO<VT,DT> where DT : ReportViewModelBaseDTO<VT,DT>

Теперь ваш класс «знает», что второй параметр типа является конкретной реализацией самого себя.

Для примера вы могли бы сделать:

public static DT Create(VT viewModel)
{
  return Mapper.Map<VT, DT>(viewModel);   
}

и определите Mapper.Map как:

private U Map<T, U>(ViewModel viewModel) where U : ReportViewModelBaseDTO<T,U>{...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...