1

我有以下简单的演示者和视图(MVP)代码。我无法理解,我们只是将视图构造函数中的视图(即“this”)传递给演示者实例。但是,在presenter类中,我们有一个接口作为参数。我注意到,我们在视图中实现了接口。但是,当它接受的参数是 Presenter 类构造函数中的接口时,我不明白我们如何能够传递类(使用“this”查看实例)。

请解释。我有点新。

interface IApplicationConnection
{
   string Connect { get; set;}
   void SetText(string text);
}

public partial class MyForm : Form, IApplicationConnection
{
  private Presenter _presenter;

  public MyForm()
  {
    InitializeComponent();
    _presenter = new Presenter(this);
  }

  public string Connect { get; set; }
}

演讲者类:

public class Presenter
{
  IApplicationConnection _view;
  public Presenter(IApplicationConnection view)
  {
     _view = view;
  }

  public void Clicked()
  {
    _view.SetText("Clicked");
  }
}
4

4 回答 4

4

从您写的内容来看,您似乎不确定“this”是什么意思。实际上,当在一个实例(不是静态的!)方法中时,“this”总是指该方法所属并为其执行的实例。

在您的示例中,“this”指的是 MyView 实例。由于该类实现了您的接口,因此您可以将其传递给演示者构造函数。

假设你的类实现了三个接口:

public class A : I1, I2, I3 ...

你要把它传给

public void Foo( I1, I2, I3 )

那么在类中调用 Foo 是合法的

Foo( this, this, this )

由于该类实现了多个接口,因此它可以“构成”三种不同的规范,表示为接口。

于 2013-07-02T18:25:46.720 回答
1

这就是接口的工作方式。您可以将类的实例传递给任何接受任一方法的方法

  • 这个确切的类
  • 它的任何基类
  • 该类实现的任何接口。
于 2013-07-02T18:17:11.130 回答
1

this是那个类的一个实例

MVP 做了一些关注点分离,您可以使用模拟视图轻松测试演示者,因为您是通过接口注入它。

于 2013-07-02T18:12:12.793 回答
1

您可以传递类的实例,因为该类必须实现在演示者中作为参数传递的接口。

这称为通过构造函数的依赖注入。这种方式使设计解耦,因为演示者不必担心或知道接口 IApplicationConnection_view 的实现。它只知道将要实现的功能已实现。

此外,MVP 模式也变得更加可测试,因为您可以使用假对象模拟视图并在单元测试中测试您的演示者。我希望这一切对你有意义。

于 2013-07-02T18:12:18.050 回答