Pengubah Akses (Panduan Pemrograman C#)
Semua jenis dan anggota jenis memiliki tingkat aksesibilitas. Tingkat aksesibilitas mengontrol apakah mereka bisa digunakan dari kode lain di perakitan Anda atau rakitan lainnya. 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
ataustruct
dapat mengakses anggota ini. - dilindungi: Hanya kode dalam yang sama
class
atau turunanclass
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.
- file: Hanya kode dalam file yang sama yang dapat mengakses jenis atau anggota.
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 |
file |
---|---|---|---|---|---|---|---|
Dalam file | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
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.
Ketika satu deklarasi kelas parsial atau metode parsial tidak mendeklarasikan aksesibilitasnya, ia memiliki aksesibilitas deklarasi lainnya. 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 dalam namespace (tidak ditumpuk dalam kelas atau struktur lain) dapat berupa public
atau internal
. internal
adalah defaultnya jika tidak ada pengubah akses yang ditentukan.
Anggota struktur, termasuk kelas dan struktur berlapis, dapat dideklarasikan sebagai public
, internal
, atau private
. Anggota kelas, termasuk kelas dan struktur berlapis, dapat berupa public
, protected internal
, protected
, internal
, private protected
, atau private
. Anggota kelas dan struktur, termasuk kelas dan struktur berlapis, memiliki akses private
secara default.
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
Antarmuka yang dideklarasikan langsung dalam namespace dapat berupa public
atau internal
dan, sama seperti kelas dan struktur, antarmuka default untuk 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. Anda menggunakan 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
Anggota class
atau struct
(termasuk kelas dan struktur berlapis) dapat dideklarasikan dengan salah satu dari enam jenis akses. Anggota struktur tidak dapat dinyatakan sebagai protected
, protected internal
, atau private protected
karena struktur tidak mendukung pewarisan.
Biasanya, aksesibilitas anggota tidak lebih besar dari aksesibilitas jenis yang memuatnya. Namun, public
anggota internal
kelas mungkin dapat diakses 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
.
Operator yang ditentukan pengguna harus selalu dinyatakan sebagai public
dan static
. 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
{
get { return _wheels; }
}
}
Finalizer tidak dapat memiliki pengubah aksesibilitas. Anggota jenis enum
selalu public
, dan tidak ada pengubah akses yang dapat diterapkan.
Pengubah file
akses hanya diperbolehkan pada deklarasi jenis tingkat atas (tidak berlapis).
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk