为什么所有的屏幕对象方法都需要声明为虚拟的?

Why do all screen object methods need to be declared virtual?

我刚开始使用 white,在成功进行一些测试后,我正在查看一些源代码以更好地了解它是如何工作的。

首先让我感到困惑(并且一直让我感到困惑)的事情之一是需要让屏幕对象中的所有 public 函数都是虚拟的。通读了the documentation, and looked at the source,没看到有说为什么这个要求是强制性的。。。只能认为是代理强制执行了这个要求,但是好像只对字段进行操作,并没有似乎对任何方法都有效...

我的猜测是因为白方使用 DynamicProxy to create proxy objects。 DynamicProxy 的网站指定:

You can use DynamicProxy to generate lightweight proxies on the fly for one or more interfaces or even concrete classes (but only virtual methods will be intercepted).

通过将属性和方法标记为虚拟,运行时将调用代理上的方法,而不是调用代理所基于的 class 上的方法。