Pembatasan penggunaan tingkat aksesibilitas - Referensi C#
Saat Anda menentukan tipe dalam deklarasi, periksa apakah tingkat aksesibilitas tipe bergantung pada tingkat aksesibilitas anggota atau tipe lain. Misalnya, kelas dasar langsung harus setidaknya dapat diakses seperti kelas turunan. Deklarasi berikut menyebabkan kesalahan kompilator karena kelas BaseClass
dasar kurang dapat diakses daripada MyClass
:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
Tabel berikut ini meringkas pembatasan tingkat aksesibilitas yang dinyatakan.
Konteks | Keterangan |
---|---|
Kelas | Kelas dasar langsung dari tipe kelas harus setidaknya dapat diakses seperti tipe kelas itu sendiri. |
Antarmuka | Antarmuka dasar eksplisit dari jenis antarmuka harus setidaknya dapat diakses seperti jenis antarmuka itu sendiri. |
Delegasi | Tipe kembalian dan tipe parameter dari tipe delegasi harus setidaknya dapat diakses seperti tipe delegasi itu sendiri. |
Konstanta | Jenis konstanta harus setidaknya dapat diakses seperti konstanta itu sendiri. |
Bidang | Jenis bidang setidaknya harus dapat diakses seperti bidang itu sendiri. |
Metode | Tipe pengembalian dan tipe parameter dari suatu metode harus setidaknya dapat diakses seperti metode itu sendiri. |
Properti | Jenis properti harus setidaknya dapat diakses seperti properti itu sendiri. |
Peristiwa | Jenis acara setidaknya harus dapat diakses seperti acara itu sendiri. |
Indexers | Jenis dan tipe parameter pengindeks harus setidaknya dapat diakses seperti pengindeks itu sendiri. |
Operator | Tipe pengembalian dan tipe parameter operator harus setidaknya dapat diakses seperti operator itu sendiri. |
Konstruktor | Jenis parameter konstruktor harus setidaknya dapat diakses seperti konstruktor itu sendiri. |
Contoh
Contoh berikut berisi deklarasi yang salah dari berbagai jenis. Komentar yang mengikuti setiap deklarasi menunjukkan kesalahan pengkompilasi yang diharapkan.
// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.
using System;
// A delegate:
delegate int MyDelegate();
class B
{
// A private method:
static int MyPrivateMethod()
{
return 0;
}
}
public class A
{
// Error: The type B is less accessible than the field A.myField.
public B myField = new B();
// Error: The type B is less accessible
// than the constant A.myConst.
public readonly B myConst = new B();
public B MyMethod()
{
// Error: The type B is less accessible
// than the method A.MyMethod.
return new B();
}
// Error: The type B is less accessible than the property A.MyProp
public B MyProp
{
set
{
}
}
MyDelegate d = new MyDelegate(B.MyPrivateMethod);
// Even when B is declared public, you still get the error:
// "The parameter B.MyPrivateMethod is not accessible due to
// protection level."
public static B operator +(A m1, B m2)
{
// Error: The type B is less accessible
// than the operator A.operator +(A,B)
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}
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