Bagikan melalui


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