Erişim Değiştiricileri (C# Programlama Kılavuzu)

Tüm türlerin ve tür üyelerinin erişilebilirlik düzeyi vardır. Erişilebilirlik düzeyi, bunların derlemenizdeki diğer kodlardan mı yoksa diğer derlemelerden mi kullanılabileceğini denetler. Derleme, tek bir derlemede bir veya daha fazla .cs dosyası derlenerek oluşturulan bir .dll veya .exe. Bir türü veya üyeyi bildirirken erişilebilirliğini belirtmek için aşağıdaki erişim değiştiricilerini kullanın:

  • public: Herhangi bir derlemedeki kod bu türe veya üyeye erişebilir. İçeren türün erişilebilirlik düzeyi, türün genel üyelerinin erişilebilirlik düzeyini denetler.
  • private: Yalnızca aynı class içinde bildirilen kod veya struct bu üyeye erişebilir.
  • protected: Yalnızca aynı class veya türetilmiş class bir kod bu türe veya üyeye erişebilir.
  • internal: Yalnızca aynı derlemedeki kod bu türe veya üyeye erişebilir.
  • korumalı iç: Yalnızca aynı derlemedeki veya başka bir derlemedeki türetilmiş bir sınıftaki kod bu türe veya üyeye erişebilir.
  • private protected: Yalnızca aynı derlemedeki ve aynı sınıftaki veya türetilmiş bir sınıftaki kod türüne veya üyesine erişebilir.
  • file: Yalnızca aynı dosyadaki kod türüne veya üyesine erişebilir.

Bir record türdeki değiştirici, derleyicinin ek üyeleri sentezlesine neden olur. Değiştirici, record veya record classrecord structiçin varsayılan erişilebilirliği etkilemez.

Özet tablosu

Arayanın konumu public protected internal protected internal private protected private file
Dosyanın içinde ✔️️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
sınıfı içinde ✔️️ ✔️ ✔️ ✔️ ✔️ ✔️
Türetilmiş sınıf (aynı derleme) ✔️ ✔️ ✔️ ✔️ ✔️
Türetilmemiş sınıf (aynı derleme) ✔️ ✔️ ✔️
Türetilmiş sınıf (farklı derleme) ✔️ ✔️ ✔️
Türetilmemiş sınıf (farklı derleme) ✔️

Aşağıdaki örneklerde, bir tür ve üye üzerinde erişim değiştiricilerinin nasıl belirtildiği gösterilmektedir:

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. Bazı durumlarda, içeren türün erişilebilirliği üyelerinin erişilebilirliğini kısıtlar.

Kısmi bir sınıfın veya kısmi yöntemin bir bildirimi erişilebilirliğini bildirmediğinde, diğer bildirimin erişilebilirliği vardır. Kısmi sınıf veya yöntem için birden çok bildirim farklı erişim açıklarsa derleyici bir hata oluşturur.

Sınıf ve yapı erişilebilirliği

Doğrudan bir ad alanı içinde bildirilen sınıflar ve yapılar (diğer sınıflar veya yapılar içinde iç içe değildir) veya internalolabilirpublic. internal , hiçbir erişim değiştirici belirtilmediğinde varsayılan değerdir.

İç içe sınıflar ve yapılar da dahil olmak üzere yapı üyeleri , internalveya privateolarak bildirilebilirpublic. İç içe geçmiş sınıflar ve yapılar da dahil olmak üzere sınıf üyeleri , , protected internal, protectedinternal, , private protectedveya privateolabilirpublic. İç içe sınıflar ve yapılar da dahil olmak üzere sınıf ve yapı üyeleri varsayılan olarak erişime sahiptir private .

Türetilmiş sınıfların temel türlerinden daha fazla erişilebilirliği olamaz. bir iç sınıfından B türetilen bir ortak sınıf Abildiremezsiniz. İzin verilirse, tümüne veya üyelerine A türetilmiş sınıftan erişilebildiği için genel hale getirmenin A etkisi internal olur.protected

kullanarak belirli diğer derlemelerin iç türlerinize erişmesini InternalsVisibleToAttributesağlayabilirsiniz. Daha fazla bilgi için bkz . Arkadaş Derlemeleri.

Diğer türler

Doğrudan bir ad alanı içinde bildirilen arabirimler, sınıflar ve yapılar gibi varsayılan olarak internal erişilecek veya ve arabirimleri olabilir.publicinternal Arabirimin amacı, diğer türlerin bir sınıfa veya yapıya erişmesini sağlamak olduğundan, arabirim üyeleri public varsayılan olarak kullanılır. Arabirim üyesi bildirimleri herhangi bir erişim değiştirici içerebilir. Bir arabirimin tüm uygulayıcıları tarafından gereken ortak bir uygulama sağlamak için üyeler üzerinde interface erişim değiştiricileri kullanırsınız.

Doğrudan delegate ad alanında bildirilen bir türün varsayılan olarak erişimi vardır internal .

Erişim değiştiricileri hakkında daha fazla bilgi için Erişilebilirlik Düzeyleri sayfasına bakın.

Üye erişilebilirliği

Bir class veya'nın struct üyeleri (iç içe sınıflar ve yapılar dahil) altı erişim türünden herhangi biriyle bildirilebilir. Yapılar devralmayı desteklemediğinden yapı üyeleri , protected internalveya private protected olarak protectedbildirilemiyor.

Normalde, bir üyenin erişilebilirliği, onu içeren türün erişilebilirliği değerinden büyük değildir. Ancak, public üye internal arabirim yöntemleri uygularsa veya genel bir temel sınıfta tanımlanan sanal yöntemleri geçersiz kılarsa, bir sınıfın üyesine derleme dışından erişilebilir.

Herhangi bir üye alanının, özelliğinin veya olayının türü en az üyenin kendisi kadar erişilebilir olmalıdır. Benzer şekilde, herhangi bir yöntemin, dizin oluşturucunun veya temsilcinin dönüş türü ve parametre türleri en az üyenin kendisi kadar erişilebilir olmalıdır. Örneğin, aynı zamanda olmadığı sürece Cpublicbir sınıf C döndüren bir yönteminiz M olamazpublic. Benzer şekilde, olarak privatebildirilirse A türünde A bir protected özelliğiniz olamaz.

Kullanıcı tanımlı işleçler her zaman ve staticolarak public bildirilmelidir. Daha fazla bilgi için bkz . İşleç aşırı yüklemesi.

Bir class veya struct üyesinin erişim düzeyini ayarlamak için, aşağıdaki örnekte gösterildiği gibi üye bildirimine uygun anahtar sözcüğü ekleyin.

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

Sonlandırıcıların erişilebilirlik değiştiricileri olamaz. Bir enum türün üyeleri her zaman publicşeklindedir ve hiçbir erişim değiştiricisi uygulanılamaz.

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.