2014-10-07 53 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