2014-10-07 26 views
1

在Winforms上使用继承时,它会导致类出现Shared。 为什么只有Main方法的第二行显示语法警告? TestForm102.Widgets.Count应该突出显示相同的问题。继承导致类像它一样共享

注意:我将MustInherit添加到TestForm101以突出显示问题(...它应该显示什么内容)。如果我删除它,表单就会像共享一样。

enter image description here

+1

请张贴的代码,而不是一个屏幕截图。 – abatishchev 2014-10-08 00:37:53

+1

尽管继承,您仍然需要首先使用TestForm102(好名字!)的实例。 – abatishchev 2014-10-08 00:39:18

+0

我想你错过了我的观点......这只是一个代码示例,以证明在不创建所述表单的实例的情况下可以错误地访问继承的表单。我在任何可能的解决方案之后,都会错误地使用该类而不是该类的一个实例来阻止我们的开发人员。 – 2014-10-08 07:27:39

回答

2

第一线工作,因为TestForm102TestForm102一个实例,而不是正如人们所期望一个类型。它是由VS自动生成的,你可以在My.Forms中找到它。你最后一行失败,因为VS不能自动生成MustInherit表单和/或没有公共无参数构造函数的表单的实例。此时TestForm101是一种类型,正如所观察到的,您不能在没有对象引用的情况下引用非共享成员。

Dim y As Integer = My.Forms.TestForm102.Widgets.Count '<-Ok 
Dim x As Integer = My.Forms.TestForm101.Widgets.count '<-Error 

Error: 'TestForm101' is not a member of ...MyForms

+2

这就是为什么默认形式实例是一个坏主意。 – 2014-10-08 16:20:12

+0

我从来没有听说过'Default Instancing',直到现在......太蹩脚了。为什么他们决定将一个'经典'的VB想法重新引入VS2005是超出我的想法的。我的背景不是VB pre .Net,而是IBM RPG/400。 – 2014-10-09 02:21:15