Mengakses instance kelas yang sama dalam bentuk lain

Saya yakin ini adalah pertanyaan sederhana, tapi saya tidak punya cukup pengalaman untuk mengetahui jawabannya. :)

DataClass, Form1, Form2

Saya memiliki kelas publik, DataClass, dalam file terpisah, DataClass.vb. Di DataClass Saya memiliki data yang disimpan dalam beberapa array yang perlu saya akses. Saya memiliki metode di DataClass sehingga saya dapat mengakses data. Salah satunya adalah GetName. Semuanya berfungsi dengan baik di Form1. Saya perlu mengakses data yang sama dalam array pada formulir lain, tetapi saya harus memanggil instance kelas baru, jadi ketika saya memanggil metode untuk mengakses array, datanya kosong.

Saya telah melihat beberapa thread menyebutkan pembuatan singleton class, tetapi sebagian besar tentang C# yang saya tidak begitu paham.

Apa praktik terbaiknya?


person Brady    schedule 19.01.2013    source sumber
comment
Apakah Anda membuat instance Form2 dari kode yang berjalan di dalam Form1?   -  person Steve    schedule 20.01.2013
comment
Metode xfx akan bekerja untuk Anda, tetapi saya menyarankan Anda membaca beberapa tutorial/buku OOP. Karena dengan begitu Anda akan mendapatkan pemahaman yang lebih mendalam tentang apa yang dimaksud dengan membuat objek baru, meneruskan objek melalui parameter, memiliki asosiasi dari objek ke objek lainnya, dan lain sebagainya.   -  person Desty    schedule 20.01.2013
comment
@Steve - Ya, tetapi hanya dengan memanggil nama formulir dan .Show()   -  person Brady    schedule 20.01.2013
comment
@Desty - Terima kasih atas sarannya, saya rasa saya harus belajar lebih banyak tentang OOP untuk mendapatkan pemahaman yang lebih baik.   -  person Brady    schedule 20.01.2013


Jawaban (2)


Ada banyak cara untuk melakukan hal ini. Salah satunya akan melibatkan pembuatan Module dan kemudian membuat variabel yang membuat instance kelas Anda Public di dalam modul:

Module MyGlobalVariables
    Public MyDataClass As DataClass
End Module

Sekarang, semua formulir di proyek Anda akan dapat mengakses DataClass melalui MyGlobalVariables.MyDataClass.


Metode yang lebih baik adalah menambahkan properti ke Form2 Anda yang dapat diatur ke instance DataClass:

Public Property MyDataClass As DataClass

Kemudian, Anda akan membuat instance Form2 sebagai berikut (dengan asumsi variabel yang Anda gunakan untuk membuat instance DataClass di Form1 disebut _dataClass):

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

Dan terakhir, cara lain adalah dengan mengganti konstruktor Form2 dan mengizinkannya menerima parameter tipe DataClass. Kemudian, Anda dapat membuat instance Form2 sebagai:

Dim frm2 As New Form2(_dataClass)

Semoga ini membantu...

person xfx    schedule 19.01.2013
comment
Metode kedua yang Anda berikan adalah solusi sempurna untuk aplikasi saya. Terima kasih! - person Brady; 20.01.2013

Anda dapat membuat kelas tunggal seperti ini

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

    Private Sub New()
    End Sub

    ' Other members here
End Class

Anda dapat mengakses satu instance melalui anggota Instance bersama yang diinisialisasi secara otomatis. Konstruktor New bersifat pribadi untuk melarang pembuatan instance baru dari luar kelas.

Anda dapat mengakses singleton seperti ini

Dim data = DataClass.Instance

Tapi ini tidak mungkin

Dim data = new DataClass() 'NOT POSSIBLE!

Karena kelas singleton diakses melalui nama kelas, Anda dapat mengaksesnya dari dua formulir dengan mudah.

person Olivier Jacot-Descombes    schedule 20.01.2013