Jenis Berlapis (Panduan Pemrograman C#)
Jenis yang ditentukan dalam kelas, struct, atau antarmuka disebut jenis berlapis. Misalnya
public class Container
{
class Nested
{
Nested() { }
}
}
Terlepas dari apakah jenis luarnya adalah kelas, antarmuka, atau struct, jenis berlapis default ke privat; jenis berlapis hanya dapat diakses dari jenis yang menyimpan jenis berlapis. Pada contoh sebelumnya, kelas Nested
tidak dapat diakses oleh jenis eksternal.
Anda juga dapat menentukan pengubah akses untuk menentukan aksesibilitas jenis berlapis, sebagai berikut:
Jenis kelas berlapis dapat berupa publik, dilindungi, internal, internal yang dilindungi, privat atau privat yang dilindungi.
Tetapi, menetapkan kelas
protected
,protected internal
atauprivate protected
yang berlapis di dalam kelas tertutup menghasilkan peringatan kompilator CS0628, "anggota baru yang dilindungi dideklarasikan dalam kelas tertutup."Perlu diketahui juga bahwa membuat jenis berlapis yang terlihat secara eksternal melanggar aturan kualitas kode CA1034 "Jenis berlapis tidak boleh terlihat".
Jenis berlapis dari struct dapat berupa publik, internal, atau privat.
Contoh berikut membuat kelas Nested
menjadi publik:
public class Container
{
public class Nested
{
Nested() { }
}
}
Jenis berlapis, atau dalam, dapat mengakses jenis yang disimpan, atau jenis luar. Untuk mengakses jenis yang disimpan, teruskan jenis sebagai argumen ke konstruktor dari jenis berlapis. Contohnya:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
Jenis berlapis memiliki akses ke semua anggota yang dapat diakses oleh jenis yang disimpan oleh jenis berlapis. Jenis berlapis dapat mengakses anggota privat dan yang dilindungi dari jenis yang disimpan, termasuk anggota yang dilindungi yang diwariskan.
Pada deklarasi sebelumnya, nama lengkap kelas Nested
adalah Container.Nested
. Ini adalah nama yang digunakan untuk membuat instans baru dari kelas berlapis, sebagai berikut:
Container.Nested nest = new Container.Nested();