Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengubah akses anggota adalah kata kunci protected.
Nota
Artikel ini membahas protected akses. Kata kunci protected juga merupakan bagian dari pengubah akses protected internal dan private protected.
Anda dapat mengakses anggota yang dilindungi dalam kelasnya dan dengan instans kelas turunan.
Untuk perbandingan 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#.
Anda dapat mengakses anggota kelas dasar yang dilindungi di kelas turunan hanya jika akses terjadi melalui jenis kelas turunan. Misalnya, pertimbangkan segmen kode berikut:
namespace Example1
{
class BaseClass
{
protected int myValue = 123;
}
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed through
// the derived class type, not through the base class type.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
}
Pernyataan baseObject.myValue = 10 menghasilkan kesalahan karena mengakses anggota yang dilindungi melalui referensi kelas dasar (baseObject berjenis BaseClass). Anda hanya dapat mengakses anggota yang dilindungi melalui jenis atau jenis kelas turunan yang berasal darinya.
Tidak seperti private protected, pengubah akses protected memungkinkan akses dari kelas turunan di rakitan apa pun. Tidak seperti protected internal, itu tidak mengizinkan akses dari kelas non-turunan dalam rakitan yang sama.
Anda tidak dapat mendeklarasikan anggota struct sebagai dilindungi karena struktur tidak dapat diwariskan.
Dalam contoh ini, kelas DerivedPoint berasal dari Point. Oleh karena itu, Anda dapat mengakses anggota kelas dasar yang dilindungi langsung dari kelas turunan.
namespace Example2
{
class Point
{
protected int x;
protected int y;
}
class DerivedPoint: Point
{
static void Main()
{
var dpoint = new DerivedPoint();
// Direct access to protected members.
dpoint.x = 10;
dpoint.y = 15;
Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
}
}
// Output: x = 10, y = 15
}
Jika Anda mengubah tingkat x akses dan y menjadi privat, pengkompilasi mengembalikan pesan kesalahan:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
Contoh berikut menunjukkan bahwa anggota kelas protected dapat diakses dari kelas turunan bahkan ketika berada di assembly yang berbeda.
// Assembly1.cs
// Compile with: /target:library
namespace Assembly1
{
public class BaseClass
{
protected int myValue = 0;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
namespace Assembly2
{
using Assembly1;
class DerivedClass : BaseClass
{
void Access()
{
// OK, because protected members are accessible from
// derived classes in any assembly
myValue = 10;
}
}
}
Aksesibilitas perakitan silang inilah yang membedakan protected dari private protected (yang membatasi akses ke rakitan yang sama) tetapi mirip dengan protected internal (meskipun protected internal juga memungkinkan akses ke rakitan yang sama dari kelas-kelas yang tidak diturunkan).
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Aksesibilitas yang dinyatakan dalam Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.