You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用接口隐藏类时,重写的实现是否仍保留?(WebDriver场景)

你的自定义Click实现完全有效!

这其实是C#多态机制的典型场景,不管你返回的是IPageElement还是IWebElement类型的引用,实际调用Click()时都会执行你在PageElement里写的带等待和异常处理的逻辑,原因如下:

  • 接口调用基于运行时类型:C#中,当你通过接口引用调用方法时,实际执行的是当前引用指向的实际对象类型的方法实现。你的GetSomething()和GetSomethingElse()返回的都是PageElement实例,只是编译时被声明为不同的接口类型,但运行时对象的本质还是PageElement。
  • 接口实现的多态性:PageElement直接实现了IWebElement的Click()方法,同时因为IPageElement继承自IWebElement,所以也自动满足了IPageElement对Click()的要求。不管你用哪个接口引用来调用,都会触发PageElement里的自定义实现。

举个简化的代码例子验证一下:

// 模拟你的接口结构
public interface IWebElement
{
    void Click();
}

public interface IPageElement : IWebElement { }

public class PageElement : IPageElement
{
    public void Click()
    {
        Console.WriteLine("执行自定义Click:等待元素就绪 + 异常处理");
    }
}

// 你的两个方法
IPageElement GetSomething() => new PageElement();
IWebElement GetSomethingElse() => new PageElement();

// 调用测试
GetSomething().Click();       // 输出:执行自定义Click:等待元素就绪 + 异常处理
GetSomethingElse().Click();   // 同样输出上面的内容

哪怕你后续让PageElement继承自WebDriver库中的某个具体元素类(比如RemoteWebElement)并重写Click()方法,结果也是一样的——重写的方法会覆盖基类的实现,运行时依然会调用你的自定义逻辑。

总结一下:完全不用担心返回类型截断的问题,你的自定义Click逻辑在两种返回场景下都会正常生效。

内容的提问来源于stack exchange,提问作者ephemeris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:29:23