Apa ruang lingkup Kelas Statis?

Saya memiliki perakitan yang dapat digunakan oleh lebih dari satu proses dalam satu waktu. Jika saya menggunakan kelas statis, apakah semua proses akan menggunakan "instance" yang sama dari kelas itu?

Karena prosesnya terpisah, apakah ini akan berjalan di bawah Domain Aplikasi yang berbeda, sehingga "instance" statisnya terpisah?

Puding dalam detailnya di sini adalah bahwa perakitan sedang digunakan oleh adaptor BizTalk khusus yang saya atur untuk memproses pesan dalam batch paralel. Itulah yang saya sebut "beberapa proses" di atas.


person Keith Sirmons    schedule 12.11.2008    source sumber


Jawaban (5)


Beberapa thread akan berbagi sebuah instance. Karena alasan ini kelas statis dapat digunakan untuk meneruskan status antar thread, namun Anda harus sangat berhati-hati untuk tidak memperkenalkan kondisi balapan (Monitor atau lock properti Anda).

Namun, beberapa proses harus berada di AppDomains terpisah sehingga masing-masing memiliki instance sendiri.

person Joel Coehoorn    schedule 12.11.2008
comment
Bagaimana dengan aplikasi web. Jika saya menggunakan kelas statis yang sama yang didefinisikan dalam DLL #1 dari dua rakitan terpisah LAINNYA (DLL #2 dan DLL #3), menjadi #3 aplikasi situs web dan #2 DLL yang direferensikan oleh situs web, apakah mereka akan berbagi kelas statis yang sama nilai-nilai? - person Lord of Scripts; 11.07.2014
comment
@LordofScripts Ya, karena semuanya berada di AppDomain yang sama - person Joel Coehoorn; 11.07.2014

Kelas statis ada satu kali per domain aplikasi. Dalam kasus Anda, ini akan bergantung pada apakah adaptor menggunakan beberapa thread dalam domain aplikasi yang sama (sehingga berbagi satu instance dari kelas statis) atau menggunakan beberapa proses (sehingga memiliki instance kelas statis yang terpisah).

person tvanfosson    schedule 12.11.2008

"Saya memiliki perakitan yang dapat digunakan oleh lebih dari satu proses pada satu waktu. Jika saya menggunakan kelas statis, apakah beberapa proses akan menggunakan "instance" yang sama dari kelas itu?"

Tidak, semuanya memiliki contoh terpisah.

"Karena prosesnya terpisah, apakah prosesnya akan berjalan di bawah Domain Aplikasi yang berbeda, sehingga "instance" statisnya terpisah?"

Ya.

person Ana Betts    schedule 12.11.2008

Ruang lingkup kelas statis terbatas pada domain aplikasi. Setiap domain aplikasi akan memiliki salinan variabel statis apa pun yang mungkin Anda miliki. Jika "proses" Anda adalah thread dalam domain aplikasi yang sama, maka proses tersebut akan berbagi nilai statis. Namun jika proses tersebut sebenarnya merupakan proses Windows yang terpisah, maka proses tersebut akan memiliki domain aplikasi yang berbeda dan karenanya salinannya terpisah.

person Maxam    schedule 12.11.2008

Anda mungkin ingin melihat pola Singleton. Intinya sepertinya Anda ingin mengontrol jumlah contoh layanan.

Saya kira Anda menginginkan dll/proyek terpisah yang melayani semua permintaan klien. Anda dapat menggunakan kelas statis/singleton/multiton untuk mengimplementasikan fungsionalitas yang diinginkan. Itu sangat tergantung pada apa yang ingin Anda capai.

person mson    schedule 12.11.2008