以另一种形式访问类的同一实例

时间:2013-01-19 22:23:45

标签: vb.net class singleton instance

我确信这是一个简单的问题,但我没有足够的经验来了解答案。 :)

DataClass, Form1, Form2

我在一个单独的文件DataClass中有一个公共类DataClass.vb。在DataClass中,我将数据存储在我需要访问的多个数组中。我在DataClass中有方法,以便我可以访问数据。其中一个是GetName。在Form1上一切正常。我需要在另一个表单上访问数组中的相同数据,但是我需要调用该类的新实例,所以当我调用方法来访问数组时,数据是空的。

我见过一些线程提到创建singleton class,但大多数都是关于我不熟悉的C#。

最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。 其中一个将涉及创建一个Module,然后在模块中创建实例化类Public的变量:

Module MyGlobalVariables
    Public MyDataClass As DataClass
End Module

现在,您项目中的所有表单都可以通过DataClass访问MyGlobalVariables.MyDataClass


一个更好的方法是向Form2添加一个可以设置为DataClass实例的属性:

Public Property MyDataClass As DataClass

然后,您将实例化Form2,如下所示(假设您在DataClass中用于实例化Form1的变量称为_dataClass):

Dim frm2 As New Form2()
frm2.MyDataClass = _dataClass
frm2.Show()

最后,另一种方法是覆盖Form2的构造函数并允许它接收类型为DataClass的参数。然后,您可以将Form2实例化为:

Dim frm2 As New Form2(_dataClass)

希望这会有所帮助......

答案 1 :(得分:1)

你可以像这样创建一个单独的类

Public Class DataClass
    Public Shared ReadOnly Instance As New DataClass()

    Private Sub New()
    End Sub

    ' Other members here
End Class

您可以通过自动初始化的共享Instance成员访问单个实例。构造函数New是私有的,以禁止从类外部创建新实例。

您可以像这样访问单身

Dim data = DataClass.Instance

但这不可能

Dim data = new DataClass() 'NOT POSSIBLE!

由于通过类名访问单例类,您可以轻松地从两种形式访问它。