Mam następujących klas/interfejsów:C# Ogólne ograniczenia - jak odnosić się do obecnego typu klasy?
public abstract class AbstractBasePresenter<T> : IPresenter<T>
where T : class, IView
{
}
public interface IPresenter<T>
{
}
public interface IView<TV, TE, TP> : IView
where TV : IViewModel
where TE : IEditModel
//where TP : AbstractBasePresenter<???>
{
}
public interface IView {}
Czy jest jakiś sposób, że mogę zmusić TP na iVIEW <> być klasa, która dziedziczy z AbstractBasePresenter?
Czy jest to moja jedyna alternatywa, aby utworzyć nietypowy interfejs IPresenter, a następnie zaktualizować aplikację IPresenter w celu jej wdrożenia, a następnie użyć opcji "TP: IPresenter"?
Dzięki
Aktualizacja:
Proponowana odpowiedź poniżej nie działa:
public interface IView<TV, TE, TP> : IView
where TV : IViewModel
where TE : IEditModel
where TP : AbstractBasePresenter<IView<TV,TE,TP>>
{
}
Mam interfejs zadeklarowane jako:
public interface IInsuredDetailsView : IView<InsuredDetailsViewModel, InsuredDetailsEditModel, IInsuredDetailsPresenter>
{ }
public interface IInsuredDetailsPresenter : IPresenter<IInsuredDetailsView>
{ }
Kompilator narzeka, że IInsuredDetailsPresenter nie jest przypisane do AbstractBasePresenter>
'AbstractBasePresenter' z czym' T'? C# nie ma koncepcji wystąpień typów ogólnych, dla których niektóre parametry nie zostały ustawione. –
'gdzie TP: AbstractBasePresenter>' kompiluje, ale nie jestem pewny, że dostarczy wynik czego chcesz ... –
nemesv
Uwaga: poniższa struktura jest zbyt skomplikowana i ciężko jest zrozumieć, co to może być użyteczny do. – Andrey