Sie wollen so etwas wie dieses, wenn Sie abstrakte Basisklassen verwenden ...
public abstract class MyBasePresenter
{
}
public abstract class MyBasePresenter<TView> : MyBasePresenter
where TView : MyBaseView
{
}
public abstract class MyBaseView
{
}
public abstract class MyBaseView<TPresenter> : MyBaseView
where TPresenter : MyBasePresenter
{
}
public class MyView : MyBaseView<MyPresenter>
{
}
public class MyPresenter : MyBasePresenter<MyView>
{
}
... dies tun, wenn Sie Schnittstellen wollen ...
public interface IMyPresenter
{
}
public interface IMyPresenter<TView> : IMyPresenter
where TView : IMyView
{
}
public interface IMyView
{
}
public interface IMyView<TPresenter> : IMyView
where TPresenter : IMyPresenter
{
}
public class MyView : IMyView<MyPresenter>
{
}
public class MyPresenter : IMyPresenter<MyView>
{
}
... von euch wirklich verrückt gehen wollen Sie sogar nisten die Generika ...
public class MyView : IMyView<IMyPresenter<IMyView>>
{
}
Sie haben Circular-Abhängigkeit: BasePresenterView ist generisch mit dem Parameter BaseActivityPresenter und BaseActivityPresenter ist generisch mit dem Parameter BasePresenterView. Ich denke nicht, dass es wirklich möglich ist –
Jeez, erste Stunden mit der Sprache und ich hämmere schon meinen Kopf gegen die Wand. Nicht gut:/ – dgomolka
In .Net ist es Konvention, alle Schnittstellen mit einem vorangestellten Großbuchstaben 'I' zu versehen und meistens das Wort' Base' für abstrakte Klassen zu reservieren. –