vb.net - 好奇的问题 - 接口(interface)变量(即昏暗的 x 作为 Iinterface = 对象?)并且如果对象是一种形式

标签 vb.net winforms interface

vb.net Windows 窗体问题。 我有 3 个具有完全相同功能的表单,因此我决定创建一个界面。

public Interface IExample

    public sub Add()

    Public sub Edit()

    Public sub View()

End Interface

然后我创建了 3 个表单,并向每个表单添加了“实现接口(interface) IExample”。

   public class frmExample1

        implements Interface IExample

frmExample2frmExample3相同

最后,在代码中,我声明了一个接口(interface)类型的变量.. 将 objfrmExample 调暗为 IExample

然后...

objFrmExample = frmExample2

此时,objfrmExample 已被实例化,尽管我还没有执行“objfrmExpample = new [what-goes-here?]”,而且我很好奇为什么。

我可能会猜测,因为您无法实例化接口(interface)变量,所以 vb.net 会自动创建一个实例。但这只是猜测。问题是,声明 Interface 类型的变量意味着什么,它是如何工作的?

无论如何,只是好奇:-)

最佳答案

At this point, objfrmExample is now instantiated, even though I've not done a "objfrmExpample = new [what-goes-here?] " and I'm curious as to why.

这与接口(interface)无关。您始终可以将 VB 中的表单类名视为实例。原因是 VB 编译器在 My.Forms 中创建所有表单的属性。 。现在,您可以通过访问 My.Forms.<FormName> 来访问每个表单的“默认”实例。 .

现在是丑陋的部分:你也可以省略 My.Forms. 。换句话说,每当你写 FormName从上下文来看,您需要一个实例而不是类名,VB 会像您编写的 My.Forms.<FormName> 一样运行。 .

幸运的是,这适用于表单,不适用于任何其他类。当您第一次访问每个默认实例时,VB 会创建它。因此,只要您不访问默认实例,就不会创建它。一旦您第一次访问它,VB 就会创建它并调用它的构造函数。

关于vb.net - 好奇的问题 - 接口(interface)变量(即昏暗的 x 作为 Iinterface = 对象?)并且如果对象是一种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418549/

相关文章:

c# - 如何找到下一个 2 :00 am in . 网的确切日期

c# - 将按钮附加到 C# Compact Framework .Net 2.0 中的列数据网格

java - 根据创建的实例的静态类型调用不同的构造函数

vb.net - 将视频上传到 YouTube,请求执行失败,(401) 未经授权

vb.net - 短路 : OrElse combined with Or

.net - WPF中的MethodInvoker?

c# - .NET 表单 - 禁用控件丢失事件

java - 如何在 Java 中调用泛型枚举的实现方法?

java - 通用接口(interface)类型转换

c# - 如何模仿Picasa渲染降质图片加速绘图