Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini mencakup kata kunci pengubah static
. Kata static
kunci juga merupakan bagian dari direktif using static
.
Gunakan pengubah static
untuk mendeklarasikan anggota statis, yang termasuk dalam tipe itu sendiri daripada ke objek tertentu. Pengubah static
dapat digunakan untuk mendeklarasikan static
kelas. Di kelas, antarmuka, dan struktur, Anda dapat menambahkan static
pengubah ke bidang, metode, properti, operator, peristiwa, dan konstruktor. Pengubah static
tidak dapat digunakan dengan pengindeks atau finalizer. 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.
class Calc1
{
public void CalculateSum()
{
int a = 3;
int b = 7;
// Static local function - cannot access 'a' or 'b' directly
static int Add(int x, int y)
{
return x + y;
}
int result = Add(a, b);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 10
*/
Anda dapat menambahkan pengubah static
ke ekspresi lambda atau metode anonim. Metode lambda statis atau anonim tidak dapat menangkap variabel lokal atau status instans.
class Calc2
{
static void Main()
{
Func<int, int, int> add = static (a, b) => a + b;
int result = add(5, 10);
Console.WriteLine($"Sum: {result}");
}
}
/*
Output:
Sum: 15
*/
Contoh - kelas statis
Kelas berikut dinyatakan sebagai static
dan hanya static
berisi metode:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
Deklarasi konstanta atau jenis secara implisit adalah static
anggota. Anggota static
tidak dapat dirujuk melalui instans. Sebagai gantinya, ini dirujuk melalui nama tipe. Sebagai contoh, perhatikan kelas berikut:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
Untuk merujuk ke static
anggota x
, gunakan nama lengkap, MyBaseC.MyStruct.x
, kecuali anggota dapat diakses dari cakupan yang sama:
Console.WriteLine(MyBaseC.MyStruct.x);
Meskipun instans suatu kelas berisi salinan terpisah dari semua bidang instans, hanya ada satu salinan dari setiap bidang kelas static
. Untuk jenis generik, setiap jenis generik tertutup memiliki salinan bidang statisnya sendiri. Bidang statis yang ditandai dengan ThreadStaticAttribute memiliki satu salinan per utas.
Tidak dimungkinkan menggunakan this
untuk merujuk pada metode static
atau aksesor properti.
static
Jika kata kunci diterapkan ke kelas, semua anggota kelas harus static
.
Kelas, antarmuka, dan static
kelas mungkin memiliki static
konstruktor.
static
Konstruktor dipanggil pada beberapa titik antara ketika program dimulai dan kelas dibuat.
Nota
Kata static
kunci memiliki penggunaan yang lebih terbatas daripada di C++. Untuk membandingkan dengan kata kunci C++, lihat Kelas penyimpanan (C++).
Untuk mendemonstrasikan anggota kelas static
, pertimbangkan sebuah kelas yang mewakili seorang karyawan perusahaan. Asumsikan bahwa kelas berisi metode untuk menghitung karyawan dan bidang untuk menyimpan jumlah karyawan. Metode dan juga bidang tidak dimiliki oleh instans karyawan manapun. Sebaliknya, mereka termasuk dalam kelas karyawan secara keseluruhan. Mereka harus dinyatakan sebagai static
anggota kelas.
Contoh - bidang statis dan metode
Contoh ini membaca nama dan ID karyawan baru, menambahkan penghitung karyawan sebanyak satu, dan menampilkan informasi tentang karyawan baru dan jumlah total karyawan. 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 static
bidang dengan menggunakan bidang lain static
yang belum dideklarasikan. Hasilnya tidak akan ditentukan hingga Anda secara eksplisit menetapkan nilai ke static
bidang .
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#.