2014-03-13 74 views

回答

5

是的它可以,它是default Form instance它留在VB6兼容性的語言。如果是我,我會避免它像瘟疫一樣,它只會讓水域混濁。改爲創建自己的實例。

+2

它不是「留在」中。 VB.NET是從零開始構建的,所以它包含的所有內容都被添加了。直到2005年,VB.NET中才存在默認實例,這是第三次迭代。我認爲我們都同意的一件事是該功能已經解決了許多問題。 – jmcilhinney

4

如上所述,使用表單名稱使用默認實例,而第二個代碼段顯式創建實例。在這兩種情況下都有一個表單類的實例;這只是系統爲您創建它還是您自己創建它的問題。

直到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() 

這確保了唯一的實例顯示並具有焦點。

相關問題