Erişim Değiştiricileri (C# Programlama Kılavuzu)Access Modifiers (C# Programming Guide)

Tüm türler ve tür üyeleri, derlemenizin veya diğer derlemelerinizdeki diğer koddan kullanılıp kullanılamayacağını denetleyen bir erişilebilirlik düzeyine sahiptir.All types and type members have an accessibility level, which controls whether they can be used from other code in your assembly or other assemblies. Aşağıdaki erişim değiştiricilerini, bir tür veya üyenin bildirimini yaparken belirtmek için kullanabilirsiniz:You can use the following access modifiers to specify the accessibility of a type or member when you declare it:

publicpublic
Türe veya üyeye aynı derlemedeki veya buna başvuran başka bir derlemede bir veya daha fazla kod tarafından erişilebilir.The type or member can be accessed by any other code in the same assembly or another assembly that references it.

privateprivate
Türe veya üyeye yalnızca aynı sınıf veya yapı içindeki kodla erişilebilir.The type or member can be accessed only by code in the same class or struct.

protectedprotected
Türe veya üyeye yalnızca aynı sınıftaki kodla veya bu sınıftan türetilmiş bir sınıfta erişilebilir.The type or member can be accessed only by code in the same class, or in a class that is derived from that class.
internalinternal
Türe veya üyeye aynı derlemedeki kod tarafından erişilebilir, ancak başka bir derlemeden erişilebilir.The type or member can be accessed by any code in the same assembly, but not from another assembly.

korumalı iç Türe veya üyeye, bildirildiği derlemede ya da başka bir derlemedeki türetilmiş bir sınıftan erişilebilen herhangi bir kod tarafından erişilebilir.protected internal The type or member can be accessed by any code in the assembly in which it is declared, or from within a derived class in another assembly.

özel korumalı Türe veya üyeye yalnızca bildirim derlemesi içinde, aynı sınıftaki veya bu sınıftan türetilmiş bir türde koda erişilebilir.private protected The type or member can be accessed only within its declaring assembly, by code in the same class or in a type that is derived from that class.

Aşağıdaki örneklerde, bir tür ve üye üzerinde erişim değiştiricilerin nasıl belirtildiğini gösterilmektedir:The following examples demonstrate how to specify access modifiers on a type and member:

public class Bicycle
{
    public void Pedal() { }
}

Tüm erişim değiştiricileri tüm bağlamlardaki tüm türler veya Üyeler tarafından kullanılamaz ve bazı durumlarda bir tür üyesinin erişilebilirliği, kapsayan türünün erişilebilirliği tarafından kısıtlanıyor.Not all access modifiers can be used by all types or members in all contexts, and in some cases the accessibility of a type member is constrained by the accessibility of its containing type. Aşağıdaki bölümler erişilebilirlik hakkında daha fazla ayrıntı sağlar.The following sections provide more details about accessibility.

Sınıf ve yapı erişilebilirliğiClass and Struct Accessibility

Bir ad alanı içinde doğrudan tanımlanmış sınıflar ve yapılar (diğer bir deyişle, diğer sınıfların veya yapıların içinde iç içe olmayan), genel veya iç olabilir.Classes and structs that are declared directly within a namespace (in other words, that are not nested within other classes or structs) can be either public or internal. Bir erişim değiştiricisi belirtilmemişse, iç varsayılandır.Internal is the default if no access modifier is specified.

İç içe sınıflar ve yapılar dahil yapı üyeleri, genel, iç veya özel olarak bildirilebilecek.Struct members, including nested classes and structs, can be declared as public, internal, or private. İç içe sınıflar ve yapılar dahil olmak üzere sınıf üyeleri ortak, korumalı dahili, korunan, dahili, özel korumalı veya özel olabilir.Class members, including nested classes and structs, can be public, protected internal, protected, internal, private protected or private. Sınıf üyeleri ve yapı üyeleri için iç içe sınıflar ve yapılar dahil erişim düzeyi varsayılan olarak özeldir.The access level for class members and struct members, including nested classes and structs, is private by default. Özel iç içe türlere, kapsayan türün dışından erişilemez.Private nested types are not accessible from outside the containing type.

Türetilmiş sınıfların temel türlerinden daha fazla erişilebilirliği olamaz.Derived classes cannot have greater accessibility than their base types. Diğer bir deyişle, bir iç sınıftan B Atüreyen ortak bir sınıfa sahip olabilirsiniz.In other words, you cannot have a public class B that derives from an internal class A. Buna izin verildiyse, tüm korumalı veya iç A A üyelerine türetilmiş sınıftan erişilebileceğinden, bu, ortak hale getirme etkisine sahip olur.If this were allowed, it would have the effect of making A public, because all protected or internal members of A are accessible from the derived class.

InternalsVisibleToAttribute kullanarak, özel diğer derlemelerin iç türlerinizi erişmesini sağlayabilirsiniz.You can enable specific other assemblies to access your internal types by using the InternalsVisibleToAttribute. Daha fazla bilgi için bkz. arkadaş derlemeler.For more information, see Friend Assemblies.

Sınıf ve yapı üye erişilebilirliğiClass and Struct Member Accessibility

Sınıf üyeleri (iç içe geçmiş sınıflar ve yapılar dahil) altı erişim türlerinden herhangi biriyle bildirilebilecek.Class members (including nested classes and structs) can be declared with any of the six types of access. Yapılar devralmayı desteklemediğinden, yapı üyeleri korumalı olarak bildirilemez.Struct members cannot be declared as protected because structs do not support inheritance.

Normalde, bir üyenin erişilebilirliği onu içeren türün erişilebilirliğiyle daha büyük değildir.Normally, the accessibility of a member is not greater than the accessibility of the type that contains it. Ancak, üye arabirim yöntemleri uygularsa veya ortak bir temel sınıfta tanımlanan sanal yöntemleri geçersiz kıldığında, iç sınıfın ortak bir üyesine derleme dışından erişilebilir.However, a public member of an internal class might be accessible from outside the assembly if the member implements interface methods or overrides virtual methods that are defined in a public base class.

Bir alan, özellik veya olay olan herhangi bir üyenin türü, en azından üyenin kendisi olarak erişilebilir olmalıdır.The type of any member that is a field, property, or event must be at least as accessible as the member itself. Benzer şekilde, dönüş türü ve bir yöntem, Dizin Oluşturucu ya da temsilci olan herhangi bir üyenin parametre türleri en azından üyenin kendisi olarak erişilebilir olmalıdır.Similarly, the return type and the parameter types of any member that is a method, indexer, or delegate must be at least as accessible as the member itself. Örneğin, ortak M C olmayan bir sınıf C döndüren ortak bir metoda sahip olamaz.For example, you cannot have a public method M that returns a class C unless C is also public. Benzer şekilde, özel olarak bildirilirse türünde A A korumalı bir özelliği olamaz.Likewise, you cannot have a protected property of type A if A is declared as private.

Kullanıcı tanımlı işleçler her zaman ortak ve statik olarak bildirilmelidir.User-defined operators must always be declared as public and static. Daha fazla bilgi için bkz. operatör aşırı yüklemesi.For more information, see Operator overloading.

Sonlandırıcılar erişilebilirlik değiştiricilerine sahip olamaz.Finalizers cannot have accessibility modifiers.

Bir sınıf veya yapı üyesinin erişim düzeyini ayarlamak için, aşağıdaki örnekte gösterildiği gibi, üye bildirimine uygun anahtar sözcüğü ekleyin.To set the access level for a class or struct member, add the appropriate keyword to the member declaration, as shown in the following example.

// public class:
public class Tricycle
{
    // protected method:
    protected void Pedal() { }

    // private field:
    private int wheels = 3;

    // protected internal property:
    protected internal int Wheels
    {
        get { return wheels; }
    }
}

Not

Korunan iç erişilebilirlik düzeyi korumalı veya dahili, korumalı ve dahili anlamına gelir.The protected internal accessibility level means protected OR internal, not protected AND internal. Diğer bir deyişle, korunan bir iç üyeye, türetilmiş sınıflar dahil olmak üzere aynı derlemedeki herhangi bir sınıftan erişilebilir.In other words, a protected internal member can be accessed from any class in the same assembly, including derived classes. Erişilebilirliği yalnızca aynı derlemede bulunan türetilmiş sınıflarla sınırlamak için, sınıfın kendisini iç bildirin ve üyelerini korumalı olarak bildirin.To limit accessibility to only derived classes in the same assembly, declare the class itself internal, and declare its members as protected. Ayrıca, 7,2 ile C# başlayarak, özel korumalı erişim değiştiricisini kullanarak, kapsayan sınıfı iç oluşturmanız gerekmeden aynı sonucu elde edebilirsiniz.Also, starting with C# 7.2, you can use the private protected access modifier to achieve the same result without need to make the containing class internal.

Diğer türlerOther Types

Bir ad alanı içinde doğrudan tanımlanmış arabirimler, genel veya iç olarak veya sınıflar ve yapılar gibi, varsayılan olarak dahili erişim için arabirimler olarak belirtilebilir.Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Arabirim üyeleri her zaman geneldir çünkü bir arabirimin amacı başka türlerin bir sınıfa veya yapıya erişmesine olanak sağlamaktır.Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. Arabirim üyelerine erişim değiştiricileri uygulanamaz.No access modifiers can be applied to interface members.

Numaralandırma üyeleri her zaman geneldir ve erişim değiştiricileri uygulanmaz.Enumeration members are always public, and no access modifiers can be applied.

Temsilciler sınıflar ve yapılar gibi davranır.Delegates behave like classes and structs. Varsayılan olarak, bir ad alanı içinde doğrudan bildirildiği sırada iç erişimleri ve iç içe olduğunda özel erişim vardır.By default, they have internal access when declared directly within a namespace, and private access when nested.

C# Dil 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