tengo las siguientes clases/interfaces:C# Restricción genérica - ¿Cómo hacer referencia al tipo de clase actual?
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 {}
¿Hay alguna manera de que pueda constreñir TP en IView <> a ser una clase que hereda de AbstractBasePresenter?
¿O es mi única alternativa para crear una interfaz IPresenter no genérica y luego actualizar IPresenter para implementarla y luego usar la verificación "TP: IPresenter"?
Gracias
Actualización:
respuesta se proponen a continuación no funciona:
public interface IView<TV, TE, TP> : IView
where TV : IViewModel
where TE : IEditModel
where TP : AbstractBasePresenter<IView<TV,TE,TP>>
{
}
He interfaz declarado:
public interface IInsuredDetailsView : IView<InsuredDetailsViewModel, InsuredDetailsEditModel, IInsuredDetailsPresenter>
{ }
public interface IInsuredDetailsPresenter : IPresenter<IInsuredDetailsView>
{ }
compilador se queja de que IInsuredDetailsPresenter no es asignable a AbstractBasePresenter>
'AbstractBasePresenter' con qué' T'? C# no tiene ningún concepto de instancias de tipos genéricos para los que no se hayan establecido algunos parámetros de tipo. –
'donde TP: AbstractBasePresenter>' compila, pero no estoy seguro de que proporcione el resultado que desee ... –
nemesv
Como observación, la siguiente estructura es muy complicada y es difícil de entender lo que puede ser útil para. – Andrey