我确信这是一个简单的问题,但我没有足够的经验来了解答案。 :)
DataClass, Form1, Form2
我在一个单独的文件DataClass
中有一个公共类DataClass.vb
。在DataClass
中,我将数据存储在我需要访问的多个数组中。我在DataClass
中有方法,以便我可以访问数据。其中一个是GetName
。在Form1
上一切正常。我需要在另一个表单上访问数组中的相同数据,但是我需要调用该类的新实例,所以当我调用方法来访问数组时,数据是空的。
我见过一些线程提到创建singleton class
,但大多数都是关于我不熟悉的C#。
最佳做法是什么?
答案 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!
由于通过类名访问单例类,您可以轻松地从两种形式访问它。