Penjelasan kelas statik dan ahli kelas statik di C #

Kata kunci statik dalam bahasa pengaturcaraan C # membolehkan anda menentukan kelas statik dan ahli statik.

Kelas statik serupa dengan kelas yang abstrak dan tertutup. Perbezaan antara kelas statik dan kelas bukan statik adalah bahawa kelas statik tidak dapat disandarkan atau diwarisi dan bahawa semua anggota kelas itu bersifat statik. Untuk menyatakan kelas sebagai statik, anda harus menandainya dengan kata kunci statik dalam deklarasi kelas. 

Tidak ada tingkah laku dalam kelas atau ahli statik, jadi tidak ada gunanya membenarkan kelas statik diwarisi. Kelas statik hanya boleh mempunyai anggota statik - anda tidak boleh menyatakan anggota contoh (kaedah, pemboleh ubah, sifat, dll.) Dalam kelas statik. Anda boleh mempunyai konstruktor statik dalam kelas statik tetapi anda tidak boleh mempunyai pembina contoh di dalam kelas statik.

Bila hendak menggunakan kelas statik di C #

Bilakah anda harus mengikuti kelas statik? Biasanya anda boleh melaksanakan kelas pembantu atau utiliti sebagai kelas statik kerana mereka tidak perlu disusun atau diwarisi dan umumnya mengandungi koleksi beberapa kaedah dan sifat yang boleh digunakan semula. Senarai kod berikut menggambarkan bagaimana kelas statik di C # kelihatan.

FileLogger kelas statik awam

    {

        Log kekosongan awam (mesej rentetan)

        {

            // Kaedah untuk log data dalam fail teks

        }

    }

Bilakah menggunakan kaedah statik di C #

Kaedah statik adalah kaedah yang tidak memerlukan contoh kelas untuk dipanggil - mereka boleh dipanggil di kelas itu sendiri. Perhatikan bahawa kaedah statik hanya dapat mengakses ahli kelas statik. Anda boleh mempunyai kaedah statik di dalam kelas statik atau kelas bukan statik. Anda juga boleh mempunyai konstruktor statik di kelas statik atau kelas bukan statik. Pembina statik digunakan untuk menginisialisasi anggota statik kelas. Pembina statik kelas dipanggil pada kali pertama ahli kelas statik diakses.

Mengapa kita mesti menggunakan kaedah statik? Mereka sedikit lebih cepat dalam pelaksanaan daripada kaedah bukan statik, iaitu kaedah contoh. Sebabnya adalah bahawa masa berjalan melewati thispenunjuk sebagai parameter tersirat kepada kaedah tidak statik atau contoh. Perhatikan bahawa untuk kaedah bukan statik penyusun mengeluarkan callvirtarahan walaupun kaedahnya tidak maya. Sekiranya anda menjadikan kaedah anda statik, penyusun memancarkan calllaman web bukan maya , menghilangkan pemeriksaan tambahan untuk mengetahui apakah contohnya tidak sah. Ini mungkin memberi anda beberapa faedah prestasi.

Oleh itu, jika aplikasi yang anda buat adalah yang penting untuk prestasi, mungkin ada baiknya menggunakan jenis dan kaedah statik dalam kod anda. Kenaikan prestasi mungkin ketara sekiranya kod anda membuat banyak panggilan ke jenis dan ahli tersebut.

Coretan kod berikut menggambarkan bagaimana kaedah statik.

Log kekosongan awam (mesej rentetan)

        {

             string filePath = @ "F: \ Log.txt";

            menggunakan (StreamWriter streamWriter = StreamWriter baru (filePath, true))

            {

                streamWriter.WriteLine (mesej);

                streamWriter.Close ();

            }

        }

Cara menggunakan anggota kelas statik di C #

CLR membahagikan memori sistem kepada tiga kawasan yang berbeza: timbunan, timbunan, dan timbunan frekuensi tinggi. Oleh kerana objek statik dapat diakses secara langsung tanpa membuat contoh kelas, objek tersebut mesti ada dalam memori sepanjang hayat aplikasi; mereka tidak perlu dikumpulkan sampah. Oleh itu, objek statik disimpan di timbunan frekuensi tinggi. Anda biasanya mempunyai satu timbunan frekuensi tinggi untuk setiap domain aplikasi.

Sekarang mari kita lihat ahli kelas yang statik. Sekali lagi, objek statik adalah objek yang kekal dalam ingatan sepanjang aplikasi dijalankan. Memperluas contoh pembalakan di atas, senarai kod berikut menggambarkan bagaimana kelas FileLogger dengan ahli statik.

FileLogger kelas statik awam

    {

        lockObject objek baca statik peribadi = objek baru ();

        rentetan statik awam FilePath

        {

            dapatkan; menetapkan;

        }

        Log kekosongan awam (mesej rentetan)

        {

            kunci (lockObject)

            {

                jika (! string.IsNullOrEmpty (FilePath))

                menggunakan (StreamWriter streamWriter = StreamWriter baru (FilePath, true))

                {

                    streamWriter.WriteLine (mesej);

                    streamWriter.Close ();

                }

            }

        }

    }

Perhatikan penggunaan harta statik yang dinamakan FilePath. Untuk memastikan keselamatan utas, lockkata kunci telah digunakan. Pemeriksaan telah dibuat dalam Log()kaedah untuk mengesahkan bahawa nilai FilePathharta tanah tidak kosong dan tidak kosong.

Ingat, apabila kelajuan aplikasi adalah intinya, mungkin perlu menggunakan kaedah statik. Anda boleh menggunakannya di kelas statik dan kelas bukan statik.