C # sınıfları ve üyeleri için varsayılan görünürlük (alanlar, yöntemler vb.)?


164

C # çeşitli yönlerinin varsayılan görünürlük için bir başvuru bulmaya çalışıyorum. Sınıf türleri, alanlar, yöntemler, numaralandırmalar vb.

Birisi varsayılan görünürlükleriyle birlikte bunların bir listesini sağlayabilir mi (yani, ön ekli değiştirici yok)?



8
Ben yinelenmiyorum ... Bu soru özel (BU varsayılan nedir?), Bu geniş (TÜM varsayılan nedir?)
WernerCD

Yanıtlar:


266

Aradığınız tüm bilgileri burada ve burada bulabilirsiniz (teşekkürler Reed Copsey ):

İlk bağlantıdan:

Doğrudan bir ad alanı içinde bildirilen sınıflar ve yapılar (diğer bir deyişle, diğer sınıflar veya yapılar içinde yuvalanmayan) genel veya dahili olabilir. Herhangi bir erişim değiştirici belirtilmemişse, varsayılan değer Dahili'dir .

...

İç içe sınıflar ve yapılar dahil olmak üzere sınıf üyeleri ve yapı üyeleri için erişim düzeyi varsayılan olarak gizlidir .

...

arayüzler varsayılan olarak dahili erişime sahiptir.

...

Delegeler sınıflar ve yapılar gibi davranırlar. Varsayılan olarak, doğrudan bir ad alanı içinde bildirildiğinde dahili erişime ve iç içe yerleştirildiklerinde özel erişime sahiptirler .


İkinci linkten:

Diğer türlerde yuvalanmayan üst düzey türler yalnızca dahili veya genel erişilebilirliğe sahip olabilir. Bu türleri için varsayılan erişilebilirlik iç kaynaklıdır .

İç içe tipler için:

Varsayılan üye erişilebilirliği üyeleri
---------- ----------------------------
halka saymak
özel sınıf
halka açık arayüz
özel yapı

6
Reed'in bilgisinden güzel bir derleme, ancak bu erişim değiştiricilerinin yöntemlere de uygulanacağını belirtmeyi unuttunuz.
Joel

4
@Joel Ne demek istiyorsun? "Üyeleri" açıkça belirtiyor. Üyeler veri ve davranış ve dolayısıyla yöntemleri içerir.
rism

Herhangi bir vb.net geliştiricisinin buna bakması durumunda vb farklıdır. Vb sınıfı üyeleri için varsayılan kapsamdır Public. Enumüyeleri de vardır Public. Muhtemelen daha az kafa karıştırıcı durumda sadece açık kapsam kullanmak için şans yüksek olduğundan bir noktada c # geliştiriciler tarafından çevrilecek veya okunacaktır. Vb.net kod üretimi maalesef bunu sizin için yapmaz.
toddmo

Sınıf içindeki iç içe bir arabirimin varsayılan olarak dahili değil özel olduğunu ekleyeceğim.
Frank Bryce

13

MSDN'den:

Diğer türlerde yuvalanmayan üst düzey türler yalnızca sahip olabilir internalveya publicerişilebilir olabilir. Bu türler için varsayılan erişilebilirlik internal.


Diğer türlerin üyesi olan yuvalanmış türler , aşağıdaki tabloda belirtildiği gibi erişilebilirlik bildirmiş olabilir.

Varsayılan Yuvalanmış Üye Erişilebilirliği ve İzin Verilen Erişilebilirlik Değiştiricileri

Kaynak: Erişilebilirlik Düzeyleri (C # Reference) (6 Aralık inci 2017)


9

Varsayılan olarak, bir sınıfın erişim değiştiricisi internal. Yani aynı derleme içinde bir sınıfa erişilebilir. Ancak sınıfa diğer meclislerden erişilmesini istiyorsak, o zaman kamuya açık hale getirilmelidir.


19
Bu bilgi diğer cevaplarda zaten mevcuttu. Bir soruyu, özellikle de bunun gibi eski bir soruyu, sağlamanız gereken ek bilgiler olduğunda veya diğer yanıtların yanlış olduğunu düşündüğünüzde cevaplamalısınız. Her neyse, Stack Overflow'a hoş geldiniz.
Gorpik

Bir sınıfın diğer meclislerin erişimine açık hale getirilmesi zorunlu değildir. InternalsVisibleToAttribute Sınıfı kullanılabilir[assembly:InternalsVisibleTo("Friend1b")]
adam

0

Varsayılan olarak private. Yuvalanmadığı sürece sınıflar internal.


1
numaralandırmalar varsayılan olarak herkese açık değil mi?
Ryan Peters

4
@Jay: Yuvalanmadığı sürece. @Ryan: Hayır, iç içe yerleştirilmemiş numaralandırmalar varsayılan olarak dahilitir.
Jon Skeet

2
@Ryan: Numaralandırma üyeleri varsayılan olarak herkese açıktır, ancak numaralandırmanın kendisi içseldir.
Reed Copsey

@ReedCopsey Ama öğrendiğim kitap bunu açıkça söylüyor enum members are private by default, so to use them outside the enum we should declare them as public. Kitabın neden söylediklerinizle çeliştiğini açıklayabilir misiniz? Teşekkürler.

@ User5794376 (açıkça silinmiş bir hesap) ne okuyorsa okuyorsa, kitapta söyledikleri doğruysa 1 yıldızlı incelemelerin tümü verilmelidir. Microsoft Docs'a yalnızca numaralandırma üyelerinin varsayılan olarak herkese açık olduğunu bilmek gerekir ve bu nedenle numaralandırmaların yalnızca kendileri üzerinde açık olmaması yaygın bir uygulamadır.
Rodney
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.