Bagikan melalui


dilindungi privat (Referensi C#)

Kombinasi private protected kata kunci adalah pengubah akses anggota. Jenis yang berasal dari kelas dan dideklarasikan dalam rakitan yang berisi dapat mengakses anggota yang dilindungi privat. Untuk perbandingan private protected dengan pengubah akses lainnya, lihat Tingkat Aksesibilitas.

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

Jenis turunan dapat mengakses anggota privat yang dilindungi dari kelas dasar dalam assembly yang berisi hanya jika jenis statis variabel adalah jenis kelas turunan. Misalnya, pertimbangkan segmen kode berikut:

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

Contoh ini berisi dua file, Assembly1.cs dan Assembly2.cs. File pertama berisi kelas dasar publik, BaseClass, dan jenis yang berasal darinya, DerivedClass1. BaseClass memiliki anggota terlindung privat, myValue, yang DerivedClass1 dapat mengakses sebagai anggota turunan dalam perangkaian yang sama.

Di file kedua, upaya untuk mengakses myValue sebagai anggota DerivedClass2 yang diwariskan menghasilkan kesalahan, karena private protected anggota hanya dapat diakses oleh jenis turunan dalam rakitan yang sama. Pembatasan ini adalah perbedaan utama dari protected (yang memungkinkan akses dari kelas turunan di rakitan apa pun) dan protected internal (yang memungkinkan akses dari kelas mana pun dalam kelas rakitan atau turunan yang sama di rakitan apa pun).

Jika Assembly1.cs berisi InternalsVisibleToAttribute nama Assembly2tersebut , kelas DerivedClass2 turunan memiliki akses ke private protected anggota yang dideklarasikan dalam BaseClass. InternalsVisibleTo membuat anggota private protected terlihat oleh kelas turunan di assembly lain.

Perbandingan dengan pengubah akses terlindungi lainnya

Tabel berikut ini meringkas perbedaan utama antara tiga pengubah akses yang dilindungi:

Pengubah Akses Majelis yang Sama, Kelas Turunan Rakitan yang Sama, Kelas Non-turunan Rakitan Berbeda, Kelas Turunan
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Gunakan protected saat Anda ingin memperoleh kelas di rakitan apa pun untuk mengakses anggota.
  • Gunakan protected internal saat Anda menginginkan akses yang paling permisif (kelas apa pun di kelas rakitan atau turunan yang sama di mana saja).
  • Gunakan private protected saat Anda menginginkan akses yang dilindungi paling ketat (hanya kelas turunan dalam rakitan yang sama).

Anda tidak dapat mendeklarasikan private protected anggota struct karena struktur tidak dapat diwariskan.

Spesifikasi bahasa C#

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

Lihat juga