Kelas statis dan anggota kelas statis di C # menjelaskan

Kata kunci statis dalam bahasa pemrograman C # memungkinkan Anda untuk menentukan kelas statis dan anggota statis.

Kelas statis mirip dengan kelas yang abstrak dan tertutup. Perbedaan antara kelas statis dan kelas non-statis adalah bahwa kelas statis tidak dapat dibuat instance-nya atau diwariskan dan bahwa semua anggota kelas tersebut bersifat statis. Untuk mendeklarasikan kelas sebagai statis, Anda harus menandainya dengan kata kunci statis di deklarasi kelas. 

Tidak ada perilaku dalam kelas atau anggota statis, jadi tidak ada gunanya mengizinkan kelas statis untuk diwarisi. Kelas statis hanya dapat memiliki anggota statis - Anda tidak dapat mendeklarasikan anggota instance (metode, variabel, properti, dll.) Di kelas statis. Anda dapat memiliki konstruktor statis dalam kelas statis tetapi Anda tidak dapat memiliki konstruktor instance di dalam kelas statis.

Kapan menggunakan kelas statis di C #

Kapan Anda harus mengikuti kelas statis? Biasanya Anda dapat mengimplementasikan kelas helper atau utilitas sebagai kelas statis karena kelas tersebut tidak perlu dibuat instance-nya atau diturunkan dan umumnya berisi kumpulan beberapa metode dan properti yang dapat digunakan kembali. Daftar kode berikut menggambarkan seperti apa kelas statis di C #.

FileLogger kelas statis publik

    {

        public static void Log (pesan string)

        {

            // Metode untuk memasukkan data dalam file teks

        }

    }

Kapan menggunakan metode statis di C #

Metode statis adalah metode yang tidak memerlukan instance kelas untuk dipanggil — metode tersebut bisa dipanggil pada kelas itu sendiri. Perhatikan bahwa metode statis hanya dapat mengakses anggota kelas statis. Anda dapat memiliki metode statis di dalam kelas statis atau kelas non-statis. Selain itu, Anda dapat memiliki konstruktor statis dalam kelas statis atau kelas non-statis. Sebuah konstruktor statis digunakan untuk menginisialisasi anggota statis kelas. Konstruktor statis kelas dipanggil saat pertama kali anggota statis kelas diakses.

Mengapa kita harus menggunakan metode statis? Mereka sedikit lebih cepat dalam eksekusi daripada metode non-statis, misalnya metode instance. Alasannya adalah runtime meneruskan thispointer sebagai parameter implisit ke metode non-statis atau instance. Perhatikan bahwa untuk metode non-statis kompilator memancarkan callvirtinstruksi meskipun metode tersebut non-virtual. Jika Anda membuat metode Anda statis, compiler akan mengeluarkan callsitus non-virtual , menghilangkan pemeriksaan ekstra untuk mengetahui apakah instance tersebut null. Ini mungkin memberi Anda beberapa manfaat kinerja.

Oleh karena itu, jika aplikasi yang Anda buat adalah aplikasi yang mengutamakan kinerja, mungkin ada gunanya menggunakan jenis dan metode statis dalam kode Anda. Peningkatan kinerja mungkin cukup besar jika kode Anda membuat banyak panggilan ke jenis dan anggota tersebut.

Cuplikan kode berikut menggambarkan seperti apa metode statis itu.

public static void Log (pesan string)

        {

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

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

            {

                streamWriter.WriteLine (pesan);

                streamWriter.Close ();

            }

        }

Cara menggunakan anggota statis kelas di C #

CLR membagi memori sistem menjadi tiga wilayah berbeda: tumpukan, heap, dan heap frekuensi tinggi. Karena objek statis dapat diakses secara langsung tanpa membuat instance kelas, objek tersebut harus ada di memori selama masa pakai aplikasi; mereka tidak perlu dikumpulkan sampah. Oleh karena itu, objek statis disimpan dalam heap frekuensi tinggi. Anda biasanya memiliki satu heap frekuensi tinggi untuk setiap domain aplikasi.

Sekarang mari kita lihat anggota statis kelas. Sekali lagi, objek statis adalah objek yang tetap ada di memori selama aplikasi dijalankan. Memperluas contoh logging di atas, daftar kode berikut mengilustrasikan seperti apa kelas FileLogger dengan anggota statis akan terlihat.

FileLogger kelas statis publik

    {

        private static readonly object lockObject = new object ();

        publik FilePath string statis

        {

            Dapatkan; set;

        }

        public static void Log (pesan string)

        {

            kunci (lockObject)

            {

                if (! string.IsNullOrEmpty (FilePath))

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

                {

                    streamWriter.WriteLine (pesan);

                    streamWriter.Close ();

                }

            }

        }

    }

Catat penggunaan properti statis bernama FilePath. Untuk memastikan keamanan benang, lockkata kunci telah digunakan. Pemeriksaan telah dilakukan di dalam Log()metode untuk memverifikasi bahwa nilai FilePathproperti bukan nol dan tidak kosong.

Ingat, ketika kecepatan aplikasi adalah yang terpenting, mungkin ada gunanya menggunakan metode statis. Anda dapat menggunakannya di kelas statis dan kelas non-statis.