如果一個項目包含Form
類,可以通過表格顯示:您是否必須在VB.NET中顯式創建表單實例?
Form1.Show
或根本形式的一個實例,需要先創建?
Dim frm As New Form1
frm.Show
如果一個項目包含Form
類,可以通過表格顯示:您是否必須在VB.NET中顯式創建表單實例?
Form1.Show
或根本形式的一個實例,需要先創建?
Dim frm As New Form1
frm.Show
是的它可以,它是default Form instance它留在VB6兼容性的語言。如果是我,我會避免它像瘟疫一樣,它只會讓水域混濁。改爲創建自己的實例。
如上所述,使用表單名稱使用默認實例,而第二個代碼段顯式創建實例。在這兩種情況下都有一個表單類的實例;這只是系統爲您創建它還是您自己創建它的問題。
直到VB 2005(這是第三個版本)之前,VB.NET中不存在默認實例。添加它們是爲了使VB6的轉換更容易,因爲有些VB6開發人員不得不明確創建對象而感到困惑。儘管他們設法產生了新的混淆,因爲這意味着形式似乎與其他類型行爲不同。另外,有些人試圖在多線程應用程序中使用默認實例,並且由於默認實例是線程特定的,因此會產生問題。
對於VB.NET中的表單實現單例模式通常沒有意義,因爲默認實例會爲您執行此操作。對於一個真正的單身人士來說,唯一的好處就是它不會是線程特定的。還值得注意的是,如果爲您的項目啓用了應用程序框架(默認情況下爲啓動窗體),那麼啓動窗體就是其類型的默認實例。
就我個人而言,我絕不會使用默認實例,除非我想單身人士功能。它爲你做的是讓訪問其他表單的成員變得更容易,但是那些需要默認實例才能實現的東西無論如何都是不好的做法。
你可能想看看一對夫婦的我的博客文章對默認實例的信息以及如何沒有他們形式之間進行通信:
http://jmcilhinney.blogspot.com.au/2009/07/vbnet-default-form-instances.html http://jmcilhinney.blogspot.com.au/2012/04/managing-data-among-multiple-forms-part.html
確保您閱讀的所有三個部分第二個。
要回答如何實現Singleton模式的問題:
Public Class Form1
''' <summary>
''' The one and only instance.
''' </summary>
Private Shared _instance As Form1
''' <summary>
''' Gets the one and only instance.
''' </summary>
Public Shared ReadOnly Property Instance As Form1
Get
'If there is no instance or it has been destroyed...
If _instance Is Nothing OrElse _instance.IsDisposed Then
'...create a new one.
_instance = New Form1
End If
Return _instance
End Get
End Property
'The only constructor is private so an instance cannot be created externally.
Private Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub
End Class
然後,您只能通過實例屬性,例如與Form1的互動
Form1.Instance.Show()
Form1.Instance.Activate()
這確保了唯一的實例顯示並具有焦點。
它不是「留在」中。 VB.NET是從零開始構建的,所以它包含的所有內容都被添加了。直到2005年,VB.NET中才存在默認實例,這是第三次迭代。我認爲我們都同意的一件事是該功能已經解決了許多問題。 – jmcilhinney