Предположим, у меня есть TemplateEngine с тремя классами:
TemplateEngine
TemplateBase<T> where T : TemplateDataBase
TemplateDataBase
и пример реализации:
SampleTemplate : TemplateBase<SampleTemplateData>
SampleTemplateData : TemplateDataBase
и теперь, в двигателе, функция геттера:
public T GetTemplate<T, U>() where T: TemplateBase<U>, new() where U : TemplateDataBase
{
var template = new T();
...
return template;
}
Поскольку все реализации TemplateBase
будут иметь ровно одно действительное значение для U
, как и в примере, тип U
можно определить с помощью выбора T
, и я не должендолжен предоставить это методу GetTemplate
.
Другие классы TemplateData
содержат совершенно разные данные, и нельзя использовать неправильный класс TemplateData
для определенного шаблона.
Если я сейчас удалю тип U
параметр из вызова функции, я получаю «Неверное количество параметров типа», или, если я удаляю его из определения функции, получатель больше не действителен, потому что «Не удается разрешить U».
Если я сохраню параметр, мне все равно не разрешено это делать, потому что «не существует неявного преобразования ссылок из SampleTemplate
в TemplateBase<TemplateDataBase>
».
Что я делаю здесь неправильно