Di dalam sebuah kelas, fungsi anggota mana pun dapat mengakses semua anggota lain dari kelas yang sama secara langsung hanya dengan nama.
Pengubah akses adalah awalan opsional pada deklarasi anggota. Fungsinya membatasi apakah bagian kode program lain bisa mengakses anggota tersebut, dan dituliskan sebelum tipe data atau nama metode.
Bidang
pengubah_akses tipe namaBidang
Metode
pengubah_akses tipe_kembali namaMetode()
{
...badan metode
}
Lima tingkat hak akses
privatepribadipublicpublikprotectedterlindungiinternalinternalprotected internalterlindungi internal
Saat ini pembaca cukup mempelajari private dan public saja. Jenis lainnya akan dibahas pada pelajaran berikutnya.
Semua anggota dapat saling diakses dari dalam kelas, tanpa mempedulikan jenis pengubah aksesnya.
Lihat contoh berikut
class Robot
{
public string name;
int age;
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
Console.WriteLine($"I am {age} years old");
}
void AgeUpdate()
{
age = age+1;
}
void SayHi()
{
SayHello();
}
}Code language: C# (cs)

Dari contoh di atas, bisa dilihat bahwa baik metode publik SayHello, metode pribadi AgeUpdate dan SayHi, bidang pribadi age maupun bidang publik name, semuanya dapat saling diakses selama kode berada di dalam kelas.
Perlu diperhatikan, jangan membuat pemanggilan saling berulang karena dapat menimbulkan perulangan tak hingga. Contohnya:
class Robot
{
public string name;
int age;
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
Console.WriteLine($"I am {age} years old");
SayHi();
}
void AgeUpdate()
{
age = age+1;
}
void SayHi()
{
SayHello();
}
}Code language: C# (cs)
Pada potongan kode ini, SayHi memanggil SayHello dan SayHello kembali memanggil SayHi. Pemanggilan timbal balik akan menghasilkan perulangan tak hingga.

Hal ini akan membuat program berhenti secara tiba-tiba
Akan muncul pesan kesalahan luapan memori

Selain itu, Anda tidak bisa memanggil metode biasa langsung saat menginisialisasi bidang, kecuali metodenya bersifat statis. Hal ini karena metode anggota biasa harus dipanggil melalui nama objek.

class Robot
{
public string name;
int age = GetInt();
static int GetInt()
{
return 1;
}
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
Console.WriteLine($"I am {age} years old");
}
void AgeUpdate()
{
age = age+1;
}
void SayHi()
{
SayHello();
}
}Code language: C# (cs)
Seperti pada gambar di atas, jika metodenya diubah menjadi statis maka diperbolehkan. Namun perlu diperhatikan, jika nilai yang dikembalikan GetInt tidak tetap saat memberikan nilai ke age:
class Program
{
static void Main(string[] args)
{
Robot robot1 = new Robot();
for (int i = 0; i < 100; i++)
{
robot1.WriteAge();
System.Threading.Thread.Sleep(1000);
}
}
}
class Robot
{
public string name;
int age = GetInt();
static int GetInt()
{
return DateTime.Now.Second;
}
public void WriteAge()
{
Console.WriteLine($"I am {age} years old");
}
}Code language: C# (cs)
Contoh kode di atas membuat GetInt mengembalikan detik waktu saat ini. Di dalam fungsi Main, perulangan for menjalankan fungsi cetak umur sebanyak 100 kali. Program berhenti selama satu detik setelah setiap pencetakan sebelum melanjutkan eksekusi. Kita akan melihat hal berikut:

Nilai detik yang dicetak selalu sama dengan nilai saat inisialisasi. Ketika variabel age diatur, fungsi GetInt hanya dipanggil satu kali. Misalnya saat itu mendapatkan angka 45, maka age akan tetap bernilai 45 berapa pun kali Anda mencetaknya. Seperti yang dibahas di bagian sebelumnya, nilai awal bidang harus sudah ditentukan pada saat inisialisasi.
Sekarang kita kembali ke topik pengubah akses
Secara ringkas: semua anggota dapat diakses dari dalam kelas, apa pun pengubah akses yang digunakan.
private – Akses Pribadi
Anggota pribadi hanya bisa diakses di dalam kelas tempat ia dideklarasikan. Kelas lain tidak dapat membaca maupun mengubahnya.
Tingkat akses bawaan anggota kelas adalah private. Melewatkan penulisan pengubah sama saja dengan menuliskan private secara eksplisit, kedua cara penulisan memiliki makna yang identik.
int MyInt1; // pribadi implisit (bawaan)
private int MyInt2; // pribadi eksplisitCode language: C# (cs)
public – Akses Publik
Anggota publik dari instansi dapat diakses oleh semua objek lain dalam program. Anda harus menambahkan pengubah public secara manual saat mendeklarasikannya.
public int MyInt; // ditandai pengubah akses publicCode language: C# (cs)
Aturan Keterlihatan Anggota
Diagram kelas sering digunakan untuk menggambarkan struktur kelas
Seluruh kelas digambarkan dengan kotak, sedangkan anggota adalah bagian di dalam kotak;
private anggota: tertutup rapat di dalam kotak kelas, tidak terlihat dari luar;
public anggota: sebagian elemen menjulur keluar kotak kelas, menandakan bisa diakses secara umum.
class Program
{
int Member1; // implisit private
private int Member2; // eksplisit private
public int Member3; // public
}Code language: C# (cs)

Contoh pada bab ini
class C1
{
int F1; // bidang pribadi implisit
private int F2; // bidang pribadi eksplisit
public int F3; // bidang publik
void DoCalc() // metode pribadi implisit
{
...
}
public int GetVal() // metode publik
{
...
}
}Code language: C# (cs)
- Anggota pribadi (F1, F2, DoCalc()): Hanya kode di dalam kelas
C1yang bisa membaca, menulis dan memanggilnya; kelas luar sama sekali tidak dapat melihatnya; - Anggota publik (F3, GetVal()): Bisa diakses tanpa batas oleh kelas atau objek lain mana pun di dalam program;
- Aturan di dalam kelas: Semua metode milik
C1, baik publik maupun pribadi, dapat mengakses semua bidang dan metode dalam kelas yang sama.
Contoh kode yang dapat dijalankan
class Program
{
static void Main(string[] args)
{
Worker worker = new Worker();
Console.WriteLine(worker.GetHours()); // Valid, anggota publik GetHours dapat diakses di luar kelas
Console.WriteLine(worker.ReadSavings());//Kesalahan, tidak bisa mengakses anggota pribadi ReadSavings dari luar kelas meskipun pakai nama instansi worker.
Console.WriteLine(worker.hours); // Valid, bidang publik hours dapat diakses di luar kelas
Console.WriteLine(worker.savings); //Kesalahan, tidak bisa mengakses bidang pribadi savings dari luar kelas
Console.WriteLine(worker.age); //Kesalahan, tidak bisa mengakses bidang pribadi age dari luar kelas
}
}
class Worker
{
int age; // bidang pribadi implisit
private double savings; // bidang pribadi eksplisit
public int hours; // bidang publik
void ReadSavings() // metode pribadi implisit
{
Console.WriteLine(savings);
}
public int GetHours() // metode publik
{
return hours;
}
}Code language: C# (cs)

Sekarang Anda sudah memiliki pemahaman dasar mengenai pengubah akses.
Pengubah Akses