Ich habe folgende Klassen/Schnittstellen:C# Generic Constraint - Wie verweist man auf den aktuellen Klassentyp?
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 {}
Gibt es eine Möglichkeit, die ich TP auf IView <> beschränken kann eine Klasse sein, die von AbstractBasePresenter erbt?
Oder ist meine einzige Alternative, um eine nicht-generische IPresenter-Schnittstelle zu erstellen und dann IPresenter zu aktualisieren, um es zu implementieren, und verwenden Sie dann prüfen "TP: IPresenter"?
Dank
Update:
Vorgeschlagene Antwort unten nicht funktioniert:
public interface IView<TV, TE, TP> : IView
where TV : IViewModel
where TE : IEditModel
where TP : AbstractBasePresenter<IView<TV,TE,TP>>
{
}
Ich habe Schnittstelle deklariert als:
public interface IInsuredDetailsView : IView<InsuredDetailsViewModel, InsuredDetailsEditModel, IInsuredDetailsPresenter>
{ }
public interface IInsuredDetailsPresenter : IPresenter<IInsuredDetailsView>
{ }
Compiler beschwert sich, dass IInsuredDetailsPresenter nicht übertragbar ist AbstractBasePresenter>
'AbstractBasePresenter' mit was' T'? C# hat kein Konzept von Instanzen generischer Typen, für die einige Typparameter nicht festgelegt wurden. –
'wo TP: AbstractBasePresenter>' Kompiliert, aber ich bin mir nicht sicher, dass es das Ergebnis liefern wird, was Sie wollen ... –
nemesv
Als eine Bemerkung ist die folgende Struktur überkompliziert und es ist schwer zu verstehen, was es sein kann nützlich zum. – Andrey