Aracılığıyla paylaş


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, derlemenizdeki veya diğer derlemelerdeki diğer kodların bunları kullanıp kullanamayacağını 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.

En üst düzey (iç içe olmayan) türler için dosya değiştiriciyi kullanın. Değiştirici, file aynı kaynak dosyadaki koda erişimi kısıtlar. Değiştiriciyi file herhangi bir erişim değiştirici ile birleştiremezsiniz.

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
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 sınıf veya kısmi üyenin birden çok bildirimi aynı erişilebilirliği içermelidir. Bir bildirimde erişim değiştiricisi yoksa, diğer bildirimler erişim değiştiricisi bildiremez. 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ın veya yapıların içinde iç içe değildir) public veya internal erişimine sahip olabilir. Bir erişim değiştirici belirtmezseniz, varsayılan değer olur internal. Geçerli kaynak dosyaya file erişimi kısıtlamak için değiştiriciyi de kullanabilirsiniz.

İç içe sınıflar ve yapılar da dahil olmak üzere yapı üyelerini , publicveya internalolarak privatebildirebilirsiniz. İç içe sınıflar ve yapılar da dahil olmak üzere sınıf üyelerini , public, , protected internalprotected, , internalveya private protectedolarak privatebildirebilirsiniz. Varsayılan olarak, iç içe geçmiş sınıflar ve yapılar da dahil olmak üzere sınıf ve yapı üyelerinin erişimi vardır 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 protected etkisi internal olur.A

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

Diğer türler

Arabirimleri bir ad alanı içinde doğrudan public veya internal olarak bildirebilirsiniz. Sınıflar ve yapılar gibi arabirimler de varsayılan olarak erişim sağlar internal . 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ın.

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

class veya struct'un üyelerini (iç içe sınıflar ve yapılar dahil) herhangi altı erişim türünden biriyle bildirebilirsiniz. Yapı üyelerini protected, protected internal veya private protected olarak bildirmeniz mümkün değildir çünkü yapılar devralmayı desteklemez.

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

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 publicMbir sınıf C döndüren bir yönteminiz C olamazpublic. Benzer şekilde, olarak protectedbildirilirse A türünde A bir private özelliğiniz olamaz.

Kullanıcı tanımlı işleçleri her zaman olarak publicbildirmeniz gerekir. 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 => _wheels;
}

Sonlandırıcıların erişilebilirlik değiştiricileri olamaz. Bir enum türün üyeleri her zaman publicşeklindedir ve erişim değiştiricileri uygulayamazsınız.

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.