gpt4 book ai didi

.net - 您是否必须在 VB.NET 中显式创建表单实例?

转载 作者:行者123 更新时间:2023-12-04 22:46:45 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is there a default instance of every form in VB.Net but not in C#?

(2 个回答)


5年前关闭。




如果项目包含 Form类,可以通过以下方式显示表单:

Form1.Show

还是需要先创建表单的实例?
Dim frm As New Form1
frm.Show

最佳答案

正如所建议的那样,使用表单名称使用默认实例,而您的第二个代码段显式创建一个实例。在这两种情况下,都有一个表单类的实例;这只是系统为您创建的还是您自己创建的问题。

VB.NET 中不存在默认实例,直到 VB 2005,这是第三个版本。添加它们是为了使从 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

确保您阅读了第二部分的所有三个部分。

回答如何实现单例模式的问题:

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

然后,您只能通过 Instance 属性与 Form1 交互,例如
Form1.Instance.Show()
Form1.Instance.Activate()

这确保了唯一的实例被显示并具有焦点。

关于.net - 您是否必须在 VB.NET 中显式创建表单实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366944/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com