Pengubah Akses

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

  1. private pribadi
  2. public publik
  3. protected terlindungi
  4. internal internal
  5. protected internal terlindungi 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)
  1. Anggota pribadi (F1, F2, DoCalc()): Hanya kode di dalam kelas C1 yang bisa membaca, menulis dan memanggilnya; kelas luar sama sekali tidak dapat melihatnya;
  2. Anggota publik (F3, GetVal()): Bisa diakses tanpa batas oleh kelas atau objek lain mana pun di dalam program;
  3. 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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *