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.
Kombinasi protected internal kata kunci adalah pengubah akses anggota. Anda dapat mengakses anggota internal yang dilindungi dari rakitan saat ini atau dari jenis yang berasal dari kelas yang berisi. Untuk perbandingan protected internal 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 apa pun dalam rakitan yang berisi dapat mengakses anggota internal yang dilindungi dari kelas dasar. Kelas turunan yang terletak di rakitan lain dapat mengakses anggota hanya jika akses terjadi melalui variabel jenis kelas turunan. Misalnya, pertimbangkan segmen kode berikut:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
Contoh ini berisi dua file, Assembly1.cs dan Assembly2.cs.
File pertama berisi kelas dasar publik, BaseClass, dan kelas lain, TestAccess.
BaseClass memiliki anggota internal yang dilindungi, myValue, yang TestAccess diakses jenis karena mereka berada di perakitan yang sama.
Dalam file kedua, upaya untuk mengakses myValue melalui instans BaseClass menghasilkan kesalahan, sementara akses ke anggota ini melalui instans kelas turunan, DerivedClass berhasil. Aturan akses ini menunjukkan bahwa protected internal memungkinkan akses dari kelas apa pun dalam kelas rakitan atau turunan yang sama di rakitan apa pun, menjadikannya yang paling permisif dari pengubah akses yang dilindungi.
Anggota struct tidak bisa protected internal karena struktur tidak dapat diwariskan.
Mengambil alih anggota internal yang dilindungi
Saat Anda mengambil alih anggota virtual, pengubah aksesibilitas metode yang ditimpa tergantung pada perakitan tempat Anda menentukan kelas turunan.
Ketika Anda menentukan kelas turunan dalam rakitan yang sama dengan kelas dasar, semua anggota yang ditimpa memiliki protected internal akses. Jika Anda menentukan kelas turunan dalam rakitan yang berbeda dari kelas dasar, anggota yang ditimpa memiliki protected akses.
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.