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

Tüm türler ve tür üyelerinin erişilebilirlik düzeyi vardır.All types and type members have an accessibility level. Erişilebilirlik düzeyi, derlemenizin veya diğer derlemelerinizdeki diğer koddan kullanılıp kullanılamayacağını denetler.The accessibility level controls whether they can be used from other code in your assembly or other assemblies. Bir tür veya üyenin, bunu bildirdiğinizde erişilebilirliği belirtmek için aşağıdaki erişim değiştiricilerini kullanın:Use the following access modifiers to specify the accessibility of a type or member when you declare it:

  • ortak: türe veya üyeye aynı derlemedeki veya buna başvuran başka bir derlemede herhangi bir kod tarafından erişilebilir.public: The type or member can be accessed by any other code in the same assembly or another assembly that references it.
  • özel: tür veya üyeye yalnızca aynı veya içindeki kodla erişilebilir class struct .private: The type or member can be accessed only by code in the same class or struct.
  • korumalı: tür veya üyeye yalnızca aynı veya aynı koda class sahip olan ya da ondan türetilmiş bir kod tarafından erişilebilir class class .protected: The type or member can be accessed only by code in the same class, or in a class that is derived from that class.
  • : tür veya üyeye aynı derlemedeki herhangi bir kod tarafından erişilebilir, ancak başka bir derlemeden erişilebilir.internal: 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 kodla erişilebilir class .protected internal: The type or member can be accessed by any code in the assembly in which it's declared, or from within a derived class in another assembly.
  • özel korumalı: tür veya üyeye yalnızca bildirim derlemesi içinde, aynı class veya ondan türetilmiş bir türde kodla erişilebilir class .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 için geçerli değildir.Not all access modifiers are valid for all types or members in all contexts. Bazı durumlarda, bir tür üyesinin erişilebilirliği, kapsayan türünün erişilebilirliği tarafından kısıtlanıyor.In some cases, the accessibility of a type member is constrained by the accessibility of its containing type.

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 diğer bir deyişle) ya da olabilir public internal .Classes and structs declared directly within a namespace (in other words, that aren't nested within other classes or structs) can be either public or internal. Internal, hiçbir erişim değiştiricisi belirtilmemişse varsayılandır.Internal is the default if no access modifier is specified.

İç içe sınıflar ve yapılar dahil yapı üyeleri, veya olarak bildirilemez public internal private .Struct members, including nested classes and structs, can be declared public, internal, or private. İç içe sınıflar ve yapılar dahil olmak üzere sınıf üyeleri,,,, public protected internal veya olabilir protected internal private protected private .Class members, including nested classes and structs, can be public, protected internal, protected, internal, private protected, or private. İç içe sınıflar ve yapılar dahil olmak üzere sınıf ve yapı üyelerinin private Varsayılan olarak erişimi vardır.Class and struct members, including nested classes and structs, have private access by default. Özel iç içe türler, kapsayan tür dışından erişilebilir değildir.Private nested types aren't accessible from outside the containing type.

Türetilmiş sınıfların temel türlerinden daha fazla erişilebilirliği olamaz.Derived classes can't have greater accessibility than their base types. Bir iç sınıftan türeyen ortak bir sınıf bildiremezsiniz B A .You can't declare a public class B that derives from an internal class A. İzin veriliyorsa, A tüm protected veya internal üyeleri A türetilmiş sınıftan erişilebilir olduğundan ortak hale getirme etkisi olur.If allowed, it would have the effect of making A public, because all protected or internal members of A are accessible from the derived class.

Kullanarak iç Türlerinize erişmek için belirli diğer derlemelerin de etkinleştirebilirsiniz InternalsVisibleToAttribute .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. protected protected internal Yapılar devralma desteklemediğinden, yapı üyeleri, veya olarak bildirilemez private protected .Struct members can't be declared as protected, protected internal, or private protected because structs don't support inheritance.

Normalde, bir üyenin erişilebilirliği onu içeren tür erişilebilirliğiyle daha büyük değildir.Normally, the accessibility of a member isn't greater than the accessibility of the type that contains it. Ancak, public ü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 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.

Herhangi bir üye alanının, özelliğin veya olayın türü en azından üyenin kendisi olarak erişilebilir olmalıdır.The type of any member field, property, or event must be at least as accessible as the member itself. Benzer şekilde, her yöntemin, dizin oluşturucunun veya temsilcinin dönüş türü ve parametre türleri en azından üyenin kendisi olarak erişilebilir olmalıdır.Similarly, the return type and the parameter types of any method, indexer, or delegate must be at least as accessible as the member itself. Örneğin, public M aynı zamanda bir sınıfı döndüren bir metoda sahip olabilirsiniz C C public .For example, you can't have a public method M that returns a class C unless C is also public. Benzer şekilde, protected olarak bildirilirse türünde bir özelliğine sahip A olamaz A private .Likewise, you can't have a protected property of type A if A is declared as private.

Kullanıcı tanımlı işleçler her zaman ve olarak bildirilmelidir public static .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 can't have accessibility modifiers.

Bir veya üyesi için erişim düzeyini ayarlamak class için struct , 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; }
    }
}

Diğer türlerOther types

Bir ad alanı içinde doğrudan tanımlanmış arabirimler, public internal sınıflar ve yapılar gibi, varsayılan olarak erişim için arabirimler olabilir internal .Interfaces declared directly within a namespace can be public or internal and, just like classes and structs, interfaces default to internal access. Arabirim üyeleri public Varsayılan olarak, bir arabirimin amacı diğer türlerin bir sınıfa veya yapıya erişmesine olanak sağlamaktır.Interface members are public by default because the purpose of an interface is to enable other types to access a class or struct. Arabirim üyesi bildirimleri herhangi bir erişim değiştiricisi içerebilir.Interface member declarations may include any access modifier. Bu, bir sınıfın tüm uygulayıcılar için gereken ortak uygulamaları sağlamak üzere statik yöntemler için kullanışlıdır.This is most useful for static methods to provide common implementations needed by all implementors of a class.

Numaralandırma üyeleri her zaman public 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, internal bir ad alanı içinde bildirildiği zaman erişime sahiptirler ve private iç içe olduğunda erişim vardır.By default, they have internal access when declared directly within a namespace, and private access when nested.

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