statis (Referensi C#)
Halaman ini mencakup kata kunci pemodifikasi static
. Kata kunci static
juga merupakan bagian dari direktif using static
.
Gunakan pemodifikasi static
untuk mendeklarasikan anggota statis, yang termasuk dalam jenis itu sendiri alih-alih objek tertentu. Pemodifikasi static
dapat digunakan untuk mendeklarasikan kelas static
. Di kelas, antarmuka, dan struktur, Anda dapat menambahkan pemodifikasi static
ke bidang, metode, properti, operator, peristiwa, dan konstruktor. Pemodifikasi static
tidak dapat digunakan dengan pengindeks atau penyelesai. Untuk informasi lebih lanjut, lihat Kelas Statik dan Anggota Kelas Statik.
Anda dapat menambahkan pengubah static
ke fungsi lokal. Fungsi lokal statis tidak dapat mengambil variabel lokal atau status instans.
Anda dapat menambahkan pengubah static
ke ekspresi lambda atau metode anonim. Metode lambda statis atau anonim tidak dapat menangkap variabel lokal atau status instans.
Contoh - kelas statis
Kelas berikut dinyatakan sebagai static
dan hanya berisi metode static
:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Deklarasi konstanta atau jenis secara implisit adalah anggota static
. Anggota static
tidak dapat dirujuk melalui instans. Sebaliknya, ini dirujuk melalui nama jenis. Sebagai contoh, perhatikan kelas berikut:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
Untuk merujuk ke anggota static
x
, gunakan nama yang sepenuhnya memenuhi syarat, MyBaseC.MyStruct.x
, kecuali anggota dapat diakses dari cakupan yang sama:
Console.WriteLine(MyBaseC.MyStruct.x);
Meskipun instans kelas berisi salinan terpisah dari semua bidang instans kelas, hanya ada satu salinan setiap bidang static
.
Tidak bleh menggunakan this
untuk referensi metode static
atau pengakses properti.
Jika kata kunci static
diterapkan ke kelas, semua anggota kelas seharusnya static
.
Kelas, antarmuka, dan kelas static
mungkin memiliki konstruktor static
. Konstruktor static
dipanggil pada beberapa titik antara ketika program dimulai dan kelas dibuat.
Catatan
Kata kunci static
lebih dibatasi penggunaanya dibandingkan di C++. Untuk membandingkan dengan kata kunci C++, lihat kelas Storage (C++).
Untuk menunjukkan anggota static
, pertimbangkan kelas yang mewakili karyawan perusahaan. Asumsikan bahwa kelas berisi metode untuk menghitung karyawan dan bidang untuk menyimpan jumlah karyawan. Metode dan bidang tidak termasuk dalam satu instans karyawan. Sebaliknya, mereka termasuk dalam kelas karyawan secara keseluruhan. Mereka harus dinyatakan sebagai anggota static
dari kelas.
Contoh - bidang dan metode statis
Contoh ini membaca nama dan ID karyawan baru, menaikkan penghitung karyawan satu per satu, dan menampilkan informasi untuk karyawan baru dan jumlah karyawan baru. Program ini membaca jumlah karyawan saat ini dari papan tombol.
public class Employee4
{
public string id;
public string name;
public Employee4()
{
}
public Employee4(string name, string id)
{
this.name = name;
this.id = id;
}
public static int employeeCounter;
public static int AddEmployee()
{
return ++employeeCounter;
}
}
class MainClass : Employee4
{
static void Main()
{
Console.Write("Enter the employee's name: ");
string name = Console.ReadLine();
Console.Write("Enter the employee's ID: ");
string id = Console.ReadLine();
// Create and configure the employee object.
Employee4 e = new Employee4(name, id);
Console.Write("Enter the current number of employees: ");
string n = Console.ReadLine();
Employee4.employeeCounter = Int32.Parse(n);
Employee4.AddEmployee();
// Display the new information.
Console.WriteLine($"Name: {e.name}");
Console.WriteLine($"ID: {e.id}");
Console.WriteLine($"New Number of Employees: {Employee4.employeeCounter}");
}
}
/*
Input:
Matthias Berndt
AF643G
15
*
Sample Output:
Enter the employee's name: Matthias Berndt
Enter the employee's ID: AF643G
Enter the current number of employees: 15
Name: Matthias Berndt
ID: AF643G
New Number of Employees: 16
*/
Contoh - inisialisasi statis
Contoh ini menunjukkan bahwa Anda dapat menginisialisasi bidang static
dengan menggunakan bidang static
lainnya yang belum dideklarasikan. Hasilnya tidak akan ditentukan hingga Anda secara eksplisit menetapkan nilai ke bidang static
.
class Test
{
static int x = y;
static int y = 5;
static void Main()
{
Console.WriteLine(Test.x);
Console.WriteLine(Test.y);
Test.x = 99;
Console.WriteLine(Test.x);
}
}
/*
Output:
0
5
99
*/
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.