Bagikan melalui


Pengubah akses (panduan pemrograman C#)

Semua jenis dan anggota jenis memiliki tingkat aksesibilitas. Tingkat aksesibilitas mengontrol apakah kode lain di rakitan Anda atau rakitan lainnya dapat menggunakannya. Rakitan adalah .dll atau .exe yang dibuat dengan menyusun satu atau lebih file .cs dalam satu kompilasi. Gunakan pengubah akses berikut untuk menentukan aksesibilitas jenis atau anggota ketika Anda mendeklarasikannya:

  • publik: Kode dalam rakitan apa pun dapat mengakses jenis atau anggota ini. Tingkat aksesibilitas jenis yang berisi mengontrol tingkat aksesibilitas anggota publik jenis tersebut.
  • privat: Hanya kode yang dideklarasikan dalam hal yang sama class atau struct dapat mengakses anggota ini.
  • dilindungi: Hanya kode dalam yang sama class atau turunan class yang dapat mengakses jenis atau anggota ini.
  • internal: Hanya kode dalam rakitan yang sama yang dapat mengakses jenis atau anggota ini.
  • internal yang dilindungi: Hanya kode dalam rakitan yang sama atau di kelas turunan di rakitan lain yang dapat mengakses jenis atau anggota ini.
  • dilindungi privat: Hanya kode dalam rakitan yang sama dan di kelas yang sama atau kelas turunan yang dapat mengakses jenis atau anggota.

Gunakan pengubah file untuk jenis tingkat atas (tidak berlapis). Pengubah file membatasi akses ke kode dalam file sumber yang sama. Anda tidak dapat menggabungkan pengubah file dengan pengubah akses apa pun.

Pengubah record pada jenis menyebabkan pengkompilasi mensintesis anggota tambahan. Pengubah record tidak memengaruhi aksesibilitas default untuk record class atau record struct.

Tabel ringkasan

Lokasi pemanggil public protected internal protected internal private protected private
Di dalam kelas ✔️️ ✔️ ✔️ ✔️ ✔️ ✔️
Kelas turunan (rakitan yang sama) ✔️ ✔️ ✔️ ✔️ ✔️
Kelas nonturunan (perakitan yang sama) ✔️ ✔️ ✔️
Kelas turunan (perakitan berbeda) ✔️ ✔️ ✔️
Kelas nonturunan (perakitan berbeda) ✔️

Contoh berikut ini menunjukkan cara menentukan pengubah akses pada jenis dan anggota:

public class Bicycle
{
    public void Pedal() { }
}

Tidak semua pengubah akses berlaku untuk semua jenis atau anggota pada semua konteks. Dalam beberapa kasus, aksesibilitas jenis yang berisi membatasi aksesibilitas anggotanya.

Beberapa deklarasi kelas parsial atau anggota parsial harus memiliki aksesibilitas yang sama. Jika satu deklarasi tidak menyertakan pengubah akses, deklarasi lainnya tidak dapat mendeklarasikan pengubah akses. Kompilator menghasilkan kesalahan jika beberapa deklarasi untuk kelas atau metode parsial menyatakan aksesibilitas yang berbeda.

Aksesibilitas kelas dan struktur

Kelas dan struktur yang dideklarasikan langsung di dalam namespace (tidak ditumpuk dalam kelas atau struktur lain) bisa memiliki public atau internal akses. Jika Anda tidak menentukan pengubah akses, defaultnya adalah internal. Anda juga dapat menggunakan pengubah file untuk membatasi akses ke file sumber saat ini.

Anda dapat mendeklarasikan anggota struct, termasuk kelas dan struktur berlapis, sebagai public, , internalatau private. Anda dapat mendeklarasikan anggota kelas, termasuk kelas dan struktur berlapis, sebagai public, , protected internal, protectedinternal, private protected, atau private. Secara default, anggota kelas dan struktur, termasuk kelas dan struktur berlapis, memiliki private akses.

Kelas turunan tidak dapat memiliki aksesibilitas yang lebih besar daripada jenis dasarnya. Anda tidak bisa mendeklarasikan kelas publik B yang berasal dari kelas internal A. Jika diizinkan, itu akan memiliki efek membuat A menjadi publik, karena semua anggota protected atau internal dari A dapat diakses dari kelas turunan.

Anda bisa mengaktifkan rakitan lain tertentu untuk mengakses jenis internal Anda dengan menggunakan InternalsVisibleToAttribute. Untuk informasi selengkapnya, lihat Rakitan Teman.

Jenis lain

Anda dapat mendeklarasikan antarmuka langsung dalam namespace sebagai public atau internal. Sama seperti kelas dan struktur, antarmuka secara default memiliki akses internal. Anggota antarmuka memiliki sifat public secara default karena tujuan antarmuka adalah untuk mengaktifkan jenis lain untuk mengakses kelas atau struktur. Deklarasi anggota antarmuka mungkin menyertakan pengubah akses apa pun. Gunakan pengubah akses pada interface anggota untuk memberikan implementasi umum yang diperlukan oleh semua implementator antarmuka.

Jenis delegate yang dideklarasikan langsung dalam namespace memiliki internal akses secara default.

Untuk informasi selengkapnya tentang pengubah akses, lihat halaman Tingkat Aksesibilitas.

Aksesibilitas anggota

Anda dapat mendeklarasikan anggota class atau struct (termasuk kelas dan struktur berlapis) dengan salah satu dari enam jenis akses. Anda tidak dapat mendeklarasikan anggota struct sebagai protected, protected internal, atau private protected karena struktur tidak mendukung pewarisan.

Biasanya, aksesibilitas anggota tidak lebih besar dari aksesibilitas jenis yang memuatnya. Namun, Anda dapat mengakses public anggota internal kelas dari luar rakitan jika anggota menerapkan metode antarmuka atau mengambil alih metode virtual yang ditentukan dalam kelas dasar publik.

Jenis bidang anggota, properti, atau peristiwa setidaknya harus dapat diakses sebagai anggota itu sendiri. Demikian juga, jenis pengembalian dan jenis parameter dari metode, pengindeks, atau delegasi apa pun setidaknya harus dapat diakses seperti anggota itu sendiri. Contohnya, Anda tidak dapat memiliki public metode M yang mengembalikan kelas C kecuali C juga public. Demikian juga, Anda tidak bisa memiliki properti protected jenis A jika A dinyatakan sebagai private.

Anda harus selalu mendeklarasikan operator yang ditentukan pengguna sebagai public. Untuk informasi selengkapnya, lihat Operator yang membebani.

Untuk mengatur tingkat akses untuk anggota class atau struct , tambahkan kata kunci yang sesuai ke deklarasi anggota, seperti yang ditunjukkan dalam contoh berikut.

// public class:
public class Tricycle
{
    // protected method:
    protected void Pedal() { }

    // private field:
    private int _wheels = 3;

    // protected internal property:
    protected internal int Wheels => _wheels;
}

Finalizer tidak dapat memiliki pengubah aksesibilitas. Anggota jenis enum selalu public, dan Anda tidak dapat menerapkan pengubah akses.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga