2013-01-19 89 views
2

我确定这是一个简单的问题,但我没有足够的经验来知道答案。 :)以另一种形式访问同一个类的实例

DataClass, Form1, Form2 

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

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

最佳做法是什么?

+0

您是否在Form1中运行的代码创建了Form2的实例? – Steve

+0

xfx方法将为您工作,但我建议您阅读一些OOP教程/书籍。因为那样你会更深入地了解它是什么意思来创建一个新对象,通过参数传递对象,从对象到其他对象等等。 – Desty

+0

@Steve - 是的,但只是通过调用表单名称和.Show() – Brady

回答

3

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

Module MyGlobalVariables 
    Public MyDataClass As DataClass 
End Module 

现在,在你的项目中的所有形式将能够通过DataClassMyGlobalVariables.MyDataClass访问。


优选的方法是将一个属性添加到您的窗体2可以设置为DataClass实例:

Public Property MyDataClass As DataClass 

然后,你会实例化Form2如下(假设你使用变量实例DataClassForm1被称为_dataClass):

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

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

Dim frm2 As New Form2(_dataClass) 

希望这有助于...

+0

您提供的第二种方法是我的应用程序的完美解决方案。谢谢! – Brady

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! 

,你可以很容易地从两种形式访问。

相关问题