从winforms基类显式调用接口方法

本文关键字:调用 接口 方法 winforms 基类 | 更新日期: 2023-09-27 18:23:35

我有一个winforms-baseform,它包含对某些方法的调用,这些方法需要在派生表单中实现。我希望确保我的派生表单确实实现了那些具有尽可能多的编译时支持的方法。如果你想使用设计器,我们都知道不能将winforms类定义为抽象类的问题(见这个问题)。

我创建了一个接口,其中包含需要以派生形式实现的方法签名。然后,我直接从基类调用接口方法,如下所示:

((IMyFormInterface)this).SomeInterfaceMethod();

(注意,我的基类没有继承IMyFormInterface。如果继承了,那么派生类就不会被迫实现它。)

然后我以派生形式从接口继承(编译器强制我实现):

public partial class TestForm : BaseForm, IMyFormInterface

我(或其他用户)唯一需要记住的就是继承IMyFormInterface

像这样直接调用接口方法可以接受吗?我在这一切中的目标是能够尽可能地确保派生表单在编译时而不是运行时实现这些"抽象"表单方法。

从winforms基类显式调用接口方法

这是绕过设计器限制的一种方法。另一种方法是使用设计器构建UserControl,然后让表单基类抽象化,并实例化停靠在整个客户端区域的控件。

如果您使用这种方法,我会在您的构造函数中断言(this is IMyFormInterface),以便尽早捕获该错误。

我在基本控件上也遇到了同样的问题
因为Designer不喜欢抽象基控件类,所以我将抽象方法重构为抛出NotImplementedException的虚拟方法
我不知道哪种方式最好。