Erişilebilirlik düzeylerini kullanma kısıtlamaları (C# Başvurusu)

Bildirimde bir tür belirttiğinizde, türün erişilebilirlik düzeyinin üyenin erişilebilirlik düzeyine mi yoksa başka bir türe mi bağlı olduğunu denetleyin. Örneğin, doğrudan temel sınıfın en az türetilmiş sınıf kadar erişilebilir olması gerekir. Aşağıdaki bildirimler, temel sınıfın BaseClass değerinden MyClassdaha az erişilebilir olması nedeniyle derleyici hatasına neden olur:

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

Aşağıdaki tabloda, bildirilen erişilebilirlik düzeylerindeki kısıtlamalar özetlemektedir.

Bağlam Açıklamalar
Sınıflar Bir sınıf türünün doğrudan temel sınıfı en az sınıf türünün kendisi kadar erişilebilir olmalıdır.
Arabirimler Arabirim türünün açık temel arabirimleri en az arabirim türünün kendisi kadar erişilebilir olmalıdır.
Temsilciler Temsilci türünün dönüş türü ve parametre türleri en az temsilci türünün kendisi kadar erişilebilir olmalıdır.
Sabitler Sabitin türü en az sabitin kendisi kadar erişilebilir olmalıdır.
Alanlar Bir alanın türü en az alanın kendisi kadar erişilebilir olmalıdır.
Yöntemler Bir yöntemin dönüş türü ve parametre türleri en az yöntemin kendisi kadar erişilebilir olmalıdır.
Veri Erişimi Bir özelliğin türü en az özelliğin kendisi kadar erişilebilir olmalıdır.
Etkinlikler Bir olayın türü en az olayın kendisi kadar erişilebilir olmalıdır.
Dizin Oluşturucular Dizin oluşturucunun türü ve parametre türleri en az dizin oluşturucunun kendisi kadar erişilebilir olmalıdır.
İşleçler Bir işlecin dönüş türü ve parametre türleri en az işlecin kendisi kadar erişilebilir olmalıdır.
Oluşturucular Bir oluşturucunun parametre türleri en az oluşturucunun kendisi kadar erişilebilir olmalıdır.

Örnek

Aşağıdaki örnekte farklı türlerdeki hatalı bildirimler yer alır. Her bildirimi izleyen açıklama beklenen derleyici hatasını gösterir.

// 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");
    }
}

C# dili belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.