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 derlemelere başka koddan kullanılıp kullanılamayacağını denetleyen bir erişilebilirlik düzeyi vardır.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ştiriciler, tür veya üyenin erişilebilirliğini bildirirken zaman 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ı derlemenin veya ona başvuran başka bir derleme içindeki diğer kodlardan 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ür veya üye, yalnızca aynı sınıf veya yapı içindeki kod tarafından erişilebilir.The type or member can be accessed only by code in the same class or struct.

protectedprotected
Türe veya üyeye aynı sınıftaki veya bu sınıftan türetilen bir sınıfta kod yalnızca tarafından 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 ancak farklı derlemeyle herhangi bir kod tarafından erişilebilir.The type or member can be accessed by any code in the same assembly, but not from another assembly.

İç korumalı türe veya üyeye bildirildiği içinden veya derlemedeki kod ile erişilebilir başka bir derlemedeki türetilmiş bir sınıf.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ı kodu aynı sınıftaki veya bu sınıftan türetilmiş bir tür tarafından türün veya üyenin yalnızca bildirme derlemesi, 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 örnekler, bir tür ve üye erişim değiştiricileri belirtmeniz göstermektedir: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 türleri veya üyeleri tüm bağlamlarda tarafından kullanılabilir ve bazı durumlarda bir tür üyesi erişilebilirliği kapsayan türü erişilebilirliğini tarafından sınırlanır.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şilebilirlikClass and Struct Accessibility

Sınıfları ve doğrudan bir ad alanı (diğer sınıflar veya yapılar içinde yuvalanmış değil, başka bir deyişle,) içinde bildirilen yapıları, public veya internal 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. Hiçbir erişim değiştiricisi belirtilmişse iç varsayılandır.Internal is the default if no access modifier is specified.

İç içe geçmiş sınıflar ve yapılar, dahil olmak üzere, Yapı üyeleri olarak genel, iç veya özel olarak bildirilebilir.Struct members, including nested classes and structs, can be declared as public, internal, or private. Sınıf üyeleri, iç içe geçmiş sınıflar ve yapılar dahil olmak üzere, genel, korumalı iç, korumalı, dahili, özel korumalı veya özel.Class members, including nested classes and structs, can be public, protected internal, protected, internal, private protected or private. Sınıf üyeleri ve iç içe geçmiş sınıflar ve yapılar, dahil olmak üzere, Yapı üyeleri için 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 geçmiş türler içeren tür dışında erişilebilir değildir.Private nested types are not accessible from outside the containing type.

Türetilmiş sınıflar temel türleri değerinden daha büyük düzeyde erişilebilirlik sahip olamaz.Derived classes cannot have greater accessibility than their base types. Diğer bir deyişle, bir ortak sınıf olamaz B iç bir sınıftan türetilen A.In other words, you cannot have a public class B that derives from an internal class A. Bu izin verilirse, bu duruma getirme yarayıp A genel, çünkü tüm korumalı veya iç üyeleri A türetilmiş sınıftan erişilebilir.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.

Belirli etkinleştirmek ınternalsvisibletoattribute özniteliğini kullanarak tarafından iç türlerine erişmek için diğer derlemeler.You can enable specific other assemblies to access your internal types by using the InternalsVisibleToAttribute. Daha fazla bilgi için arkadaş derlemeleri.For more information, see Friend Assemblies.

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

Sınıf üyeleri (iç içe geçmiş sınıflar ve yapılar dahil) erişim altı tür ile bildirilebilir.Class members (including nested classes and structs) can be declared with any of the six types of access. Yapı üyeleri, yapılar devralımı desteklemez çünkü korumalı olarak bildirilemez.Struct members cannot be declared as protected because structs do not support inheritance.

Normalde, bir üyenin erişilebilirliğini içeren türün erişilebilirlik büyük değil.Normally, the accessibility of a member is not greater than the accessibility of the type that contains it. Ancak, genel bir iç sınıf üyesi üye arabirim yöntemleri uygulayan ya da genel bir temel sınıfta tanımlanan sanal yöntemleri geçersiz kılan derlemenin dışından erişilebilir olabilir.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 herhangi bir üyenin türü en az üyesi olarak olarak erişilebilir olması gerekir.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 parametre türleri, yöntem, dizin oluşturucu veya temsilci olan herhangi bir üyenin en az üyesi olarak 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, bir genel yöntem olamaz M bir sınıf döndüren C sürece C ayrıca geneldir.For example, you cannot have a public method M that returns a class C unless C is also public. Benzer şekilde, bir korumalı özellik türü olamaz A varsa A özel olarak bildirilir.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 olarak bildirilmelidir.User-defined operators must always be declared as public. Daha fazla bilgi için işleci (C# Başvurusu).For more information, see operator (C# Reference).

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

Uygun anahtar sözcüğü bir sınıf veya yapı üyesi için erişim düzeyi ayarlamak için üye bildirimi için aşağıdaki örnekte gösterildiği gibi 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

Korumalı dahili erişilebilirlik düzeyi korumalı veya iç, not anlamına gelir. korumalı ve iç.The protected internal accessibility level means protected OR internal, not protected AND internal. Diğer bir deyişle, korumalı, dahili bir üye aynı derlemedeki türetilmiş sınıflar da dahil olmak üzere 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. Aynı derlemenin yalnızca türetilmiş sınıflarda erişilebilirlik sınırlamak için sınıfı iç bildirmek ve üyeleri protected 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, C# 7.2 ile başlayarak, kapsayan sınıfı iç yapmaya gerek kalmadan aynı sonucu elde etmek için özel bir korumalı erişim değiştiricisi kullanabilirsiniz.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ürleriOther Types

Bildirilen arabirimleri, ortak veya iç olarak ad alanı içinde doğrudan bildirilebilir ve sınıflar ve yapılar, arabirimler varsayılan iç erişimi olduğu gibi.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 bir sınıf veya yapı erişmek diğer türleri etkinleştirmek için bir arabirim amacı olduğu için ortaktır.Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. Hiçbir erişim değiştiricisine arabirimi üyelerine uygulanabilir.No access modifiers can be applied to interface members.

Her zaman numaralandırma üyelerini genel ve hiçbir erişim değiştiricisine uygulanabilir.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, doğrudan ad alanı içinde bildirildiğinde iç erişim ve iç içe olduğunda özel erişime sahiptirler.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