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 veyastruct
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 class
record struct
iç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 sınıf veya kısmi üyenin birden çok bildirimi aynı erişilebilirliği içermelidir. Kısmi sınıfın veya üyenin bir bildirimi bir erişim değiştirici içermiyorsa, 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 veya yapılar içinde iç içe değildir) veya file
erişimi olabilir.public
internal
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 , internal
veya private
olarak bildirilebilirpublic
. İç içe geçmiş sınıflar ve yapılar da dahil olmak üzere sınıf üyeleri , , protected internal
, protected
internal
, , private protected
veya private
olabilirpublic
. İç 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 A
bildiremezsiniz. İ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 InternalsVisibleToAttribute
sağ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.public
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ı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 internal
veya private protected
olarak protected
bildirilemiyor.
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 C
public
bir sınıf C
döndüren bir yönteminiz M
olamazpublic
. Benzer şekilde, olarak private
bildirilirse A
türünde A
bir protected
özelliğiniz olamaz.
Kullanıcı tanımlı işleçler her zaman ve static
olarak 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.
file
Erişim değiştiricisine yalnızca üst düzey (iç içe olmayan) tür bildirimlerinde izin verilir.
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.