6

IViewBase (すべてのビューが実装する) と IPresenterBase (すべてのプレゼンターが実装する) の 2 つの基本インターフェイスがあります。

public interface IViewBase { }

public interface IPresenterBase
{
    IViewBase View { get; set; }
}

次に、IPresenterBase から派生した新しいインターフェイス ILogPresenter と、IViewBase から派生した ILogView を作成しました。

public interface ILogPresenter : IPresenterBase { }

public interface ILogView : IViewBase{ }

ILogPresenter を実装するクラスを作成すると、

public class LogPresenter: ILogPresenter
{
    public ILogView View { get; set; }
}

エラーが発生します:

「LogPresenter」はインターフェイス メンバー「IPresenterBase.View」を実装していません。「LogPresenter.View」は「Views.IViewBase」の一致する戻り値の型を持たないため、「IPresenterBase.View」を実装できません。

LogPresenter.View の戻り値の型を、IViewBase から派生した ILogView に設定できませんか? IViewBase から派生した別の IView で ILogPresenter を実装したいと思います。

4

2 に答える 2

2

ジェネリックでこれを行うことができます:

public interface IViewBase { }

public interface IPresenterBase<T> where T : IViewBase
{
    T View { get; set; }
}

public interface ILogPresenter : IPresenterBase<ILogView> { }

public interface ILogView : IViewBase { }

public class LogPresenter : ILogPresenter
{
    public ILogView View { get; set; }
}
于 2009-11-04T10:31:54.897 に答える