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
与frmExample2
、frmExample3
相同
最后,在代码中,我声明了一个接口(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/