2

これは簡単な質問だと思いますが、答えを知るのに十分な経験がありません。:)

DataClass, Form1, Form2

DataClass別のファイルにパブリッククラスがありますDataClass.vb。アクセスする必要のあるいくつDataClassかの配列にデータが格納されています。DataClassデータにアクセスできるようにするためのメソッドがあります。それらの1つはですGetName。すべてが正常に動作しForm1ます。別のフォームの配列内の同じデータにアクセスする必要がありますが、クラスの新しいインスタンスを呼び出す必要があるため、配列にアクセスするためのメソッドを呼び出すと、データは空になります。

いくつかのスレッドがの作成について言及しているのを見てきましたsingleton classが、ほとんどは私がよく知らないC#に関するものです。

ベストプラクティスは何ですか?

4

2 に答える 2

3

これを行うには多くの方法があります。そのうちの1つは、モジュール内でModuleクラスをインスタンス化する変数を作成してから作成することです。Public

Module MyGlobalVariables
    Public MyDataClass As DataClass
End Module

DataClassこれで、プロジェクト内のすべてのフォームがviaにアクセスできるようになりますMyGlobalVariables.MyDataClass


DataClass望ましい方法は、インスタンスに設定できるプロパティをForm2に追加することです。

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)

お役に立てれば...

于 2013-01-19T22:42:04.310 に答える
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!

シングルトンクラスはクラス名を介してアクセスされるため、2つの形式から簡単にアクセスできます。

于 2013-01-20T00:02:53.513 に答える