我实际上是在尝试为我的系统制作一个基础MVP框架。我有IPresenter
,IView
,PresenterBase<IView>
和ViewBase<IPresenter>
。
以下是代码:
public interface IPresenter
{
IAppController GetAppController();
}
public interface IView
{
void AttachPresenter<T>(T presenter) where T : IPresenter;
}
public abstract class BasePresenter<TView> : IPresenter where TView : class, IView
{
protected readonly TView View;
protected readonly IAppController AppController;
protected BasePresenter(TView view, IAppController appController)
{
View = view;
AppController = appController;
View.AttachPresenter(this);
}
public IAppController GetAppController()
{
return AppController;
}
}
public class BaseView<TPresenter> : Form, IView where TPresenter : class, IPresenter
{
protected TPresenter Presenter;
public void AttachPresenter<T>(T presenter) where T : IPresenter
{
Presenter = presenter; // <-- ERROR HERE
}
}
当我尝试使用AttachPresenter
方法设置Presenter时,出现此错误:
“无法将类型'T'隐式转换为'TPresenter'”
为什么呢?两者都在实施IPresenter
。我该如何解决?我希望这些泛型类能够实现系统中的每个视图和演示者。
抱歉英语不好,希望你能理解。
答案 0 :(得分:1)
由于您需要使用相同类型的演示者:
public void AttachPresenter(TPresenter presenter)
{
Presenter = presenter;
}
答案 1 :(得分:1)
虽然T
和TPresenter
正在实施IPresenter
,但编制者认为没有相同的对象,例如:您有IAnimal
,而且Cat
{1}}和Dog
实施IAnimal
,但您不能像Cat
这样Dog
分配dog = cat
,我认为这就是原因。
所以,为什么不将你的功能改为
public void AttachPresenter(TPresenter presenter)
{
Presenter = presenter;
}