Erişilebilirlik düzeylerini kullanma kısıtlamaları (C# başvuru)Restrictions on using accessibility levels (C# Reference)

Bir bildirimde bir tür belirttiğinizde, türün erişilebilirlik düzeyinin bir üyenin ya da başka bir türün erişilebilirlik düzeyine bağımlı olup olmadığını kontrol edin.When you specify a type in a declaration, check whether the accessibility level of the type is dependent on the accessibility level of a member or of another type. Örneğin, doğrudan temel sınıfı en azından türetilmiş sınıf olarak erişilebilir olmalıdır.For example, the direct base class must be at least as accessible as the derived class. Temel sınıf BaseClass MyClassdaha az erişilebilir olduğu için aşağıdaki bildirimler bir derleyici hatasına neden olur:The following declarations cause a compiler error because the base class BaseClass is less accessible than MyClass:

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

Aşağıdaki tablo, belirtilen erişilebilirlik düzeyleri üzerindeki kısıtlamaları özetler.The following table summarizes the restrictions on declared accessibility levels.

BağlamContext AçıklamalarRemarks
SınıflarClasses Bir sınıf türünün doğrudan temel sınıfı en azından sınıf türünün kendisi kadar erişilebilir olmalıdır.The direct base class of a class type must be at least as accessible as the class type itself.
ArabirimlerInterfaces Arabirim türünün açık temel arabirimleri en az arabirim türünün kendisi kadar erişilebilir olmalıdır.The explicit base interfaces of an interface type must be at least as accessible as the interface type itself.
TemsilcilerDelegates Bir temsilci türünün dönüş türü ve parametre türleri en azından temsilci türünün kendisi kadar erişilebilir olmalıdır.The return type and parameter types of a delegate type must be at least as accessible as the delegate type itself.
SabitlerConstants Bir sabit türü en az sabit değer olarak erişilebilir olmalıdır.The type of a constant must be at least as accessible as the constant itself.
AlanlarFields Alanın türü en azından alanın kendisi kadar erişilebilir olmalıdır.The type of a field must be at least as accessible as the field itself.
YöntemlerMethods Bir yöntemin dönüş türü ve parametre türleri en az yöntemin kendisi olarak erişilebilir olmalıdır.The return type and parameter types of a method must be at least as accessible as the method itself.
Veri ErişimiProperties Özelliğin türü en az özelliğin kendisi olarak erişilebilir olmalıdır.The type of a property must be at least as accessible as the property itself.
OlaylarEvents Bir olayın türü en az olayın kendisi olarak erişilebilir olmalıdır.The type of an event must be at least as accessible as the event itself.
Dizin OluşturucularIndexers Bir dizin oluşturucunun türü ve parametre türleri en azından dizin oluşturucunun kendisi olarak erişilebilir olmalıdır.The type and parameter types of an indexer must be at least as accessible as the indexer itself.
İşleçlerOperators Bir işlecin dönüş türü ve parametre türleri en az işlecin kendisi olarak erişilebilir olmalıdır.The return type and parameter types of an operator must be at least as accessible as the operator itself.
OluşturucularConstructors Bir oluşturucunun parametre türleri en az oluşturucunun kendisi olarak erişilebilir olmalıdır.The parameter types of a constructor must be at least as accessible as the constructor itself.

ÖrnekExample

Aşağıdaki örnek farklı türlerin hatalı bildirimlerini içerir.The following example contains erroneous declarations of different types. Her bildirimi izleyen yorum, beklenen derleyici hatasını gösterir.The comment following each declaration indicates the expected compiler error.

// 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 belirtimiC# language specification

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.For more information, see the C# Language Specification. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.The language specification is the definitive source for C# syntax and usage.

Ayrıca bkz.See also