Static Classes and Static Class Members


Class statis pada dasarnya sama dengan class non-statis, namun ada satu perbedaan: class statis tidak dapat di instantiasikan. Dengan kata lain, Kita tidak dapat menggunakan keyword new untuk membuat variabel tipe class.

Karena tidak ada variabel instance, kita mengakses member class statis dengan menggunakan nama class itu sendiri. Sebagai contoh, jika kita memiliki class statis yang diberi nama UtilityClass yang memiliki metod publik bernama MethodA, Kita memanggil metod seperti yang ditunjukkan pada contoh berikut:
UtilityClass.MethodA();  
Class statis dapat digunakan sebagai wadah yang mudah digunakan untuk kumpulan metod yang hanya beroperasi pada parameter masukan dan tidak harus create atau menetapkan bidang contoh internal.

Misalnya, di .NET Framework Class Library, class Systemathath statis berisi metod yang melakukan operasi matematis, tanpa persyaratan untuk menyimpan atau mengambil data yang unik untuk instance class Math tertentu. Artinya, kita menerapkan member class dengan menentukan nama class dan nama metode, seperti yang ditunjukkan pada contoh berikut.
double dub = -3.14;  
Console.WriteLine(Math.Abs(dub));  
Console.WriteLine(Math.Floor(dub));  
Console.WriteLine(Math.Round(Math.Abs(dub)));  

// Output:  
// 3.14  
// -4  
// 3  
Seperti halnya dengan semua tipe class, tipe informasi untuk class statis dimuat oleh .NET Framework common language runtime (CLR) saat program yang mereferensikan class yang diload. Program tidak dapat menentukan dengan tepat kapan class diload.

Namun, dijamin akan dimuat dan memiliki field yang diinisialisasi dan constructor statis yang disebut sebelum class direferensikan untuk pertama kalinya dalam program kita. Constructor statis hanya disebut satu kali, dan class statis tetap tersimpan dalam memori untuk masa pakai domain aplikasi tempat program kita berada.

Daftar berikut menyediakan fitur utama class statis: 1. Contains hanya member statis. 2. Tidak bisa instantiated. 3. Disealed 4. Contain tidak Instance Constructors. Membuat class statis karena itu pada dasarnya sama dengan membuat class yang hanya berisi member statis dan private constructor.

Private Constructor mencegah agar class tidak di instantiasikan. Keuntungan menggunakan class statis adalah compiler dapat memeriksa untuk memastikan tidak ada member instance yang secara tidak sengaja ditambahkan. Compiler akan menjamin bahwa contoh class ini tidak dapat dibuat. Class statis disealed dan oleh karena itu tidak dapat inherited.

 Mereka tidak bisa inheritance dari class manapun kecuali Objek. Class statis tidak boleh berisi constructor contoh; Namun, mereka dapat berisi consturctor statis . Class non-statis juga harus mendefinisikan consturctor statis jika class berisi member statis yang memerlukan inisialisasi non-trivial.

  • Contoh

Berikut adalah contoh Class statis yang berisi dua metode yang mengubah temperature dari Celcius menjadi Fahrenheit dan dari Fahrenheit menjadi Celsius:
public static class TemperatureConverter
{
    public static double CelsiusToFahrenheit(string temperatureCelsius)
    {
        // Convert argument to double for calculations.
        double celsius = Double.Parse(temperatureCelsius);

        // Convert Celsius to Fahrenheit.
        double fahrenheit = (celsius * 9 / 5) + 32;

        return fahrenheit;
    }

    public static double FahrenheitToCelsius(string temperatureFahrenheit)
    {
        // Convert argument to double for calculations.
        double fahrenheit = Double.Parse(temperatureFahrenheit);

        // Convert Fahrenheit to Celsius.
        double celsius = (fahrenheit - 32) * 5 / 9;

        return celsius;
    }
}

class TestTemperatureConverter
{
    static void Main()
    {
        Console.WriteLine("Please select the convertor direction");
        Console.WriteLine("1. From Celsius to Fahrenheit.");
        Console.WriteLine("2. From Fahrenheit to Celsius.");
        Console.Write(":");

        string selection = Console.ReadLine();
        double F, C = 0;

        switch (selection)
        {
            case "1":
                Console.Write("Please enter the Celsius temperature: ");
                F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());
                Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F);
                break;

            case "2":
                Console.Write("Please enter the Fahrenheit temperature: ");
                C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine());
                Console.WriteLine("Temperature in Celsius: {0:F2}", C);
                break;

            default:
                Console.WriteLine("Please select a convertor.");
                break;
        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Example Output:
    Please select the convertor direction
    1. From Celsius to Fahrenheit.
    2. From Fahrenheit to Celsius.
    :2
    Please enter the Fahrenheit temperature: 20
    Temperature in Celsius: -6.67
    Press any key to exit.
 */

  • Static Members


Class non-statis dapat berisi metod statis, field, properti, atau events. Member statis dapat dipanggil di class meskipun tidak ada instance dari class yang telah dibuat. Member statis selalu diakses oleh nama class, bukan nama instance. Hanya satu salinan member statis yang ada, terlepas dari berapa banyak instance dari class yang dibuat.

Metod dan properti statis tidak dapat mengakses field dan peristiwa non-statis dalam tipe data yang mereka miliki, dan mereka tidak dapat mengakses variabel kejadian dari objek apa pun kecuali secara eksplisit dilewatkan dalam parameter metode.

Hal ini lebih khas untuk mendeklarasikan kelas non-statis dengan beberapa member statis, daripada mendeklarasikan keseluruhan class sebagai statis. Dua common umum field statis adalah menyimpan hitungan jumlah objek yang telah di instantiasi, atau untuk menyimpan nilai yang harus dibagi di antara semua contoh. 

Metod statis dapat kelebihan beban tapi tidak diganti, karena mereka termasuk dalam class, dan tidak tergantung pada kelas apa pun. Meskipun bidang tidak dapat dinyatakan sebagai static const, medan const pada dasarnya statis dalam perilakunya. Ini termasuk tipe, bukan tipe dari tipe.

 Oleh karena itu, field const dapat diakses dengan menggunakan notasi ClassName. MemberName yang sama yang digunakan untuk static fields. Tidak diperlukan instance objek. C # tidak mendukung variabel lokal statis (variabel yang dinyatakan dalam lingkup metode).

Kita mendeklarasikan member class statis dengan menggunakan keyword statis sebelum tipe data return member, seperti yang ditunjukkan pada contoh berikut:
public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;

    // Other non-static fields and properties...
}
Member statis diinisialisasi sebelum member statis diakses untuk pertama kalinya dan sebelum constructor statis, jika ada, dipanggil.

Untuk mengakses member class statis, gunakan nama class alih-alih nama variabel untuk menentukan lokasi member, seperti yang ditunjukkan pada contoh berikut:
Automobile.Drive();
int i = Automobile.NumberOfWheels;
Jika class kita berisi bidang statis, berikan constructor statis yang menginisialisasinya saat class diload.

Panggilan ke metod statis menghasilkan sebuah instruksi panggilan dalam Microsoft intermediate language(MSIL), sedangkan panggilan ke metode instance menghasilkan instruksi callvirt, yang juga memeriksa referensi objek null. Namun, sebagian besar waktu perbedaan kinerja antara keduanya tidak signifikan.
Previous
Next Post »