Dahili ve Özel Erişim Değiştiricileri


Yanıtlar:


516

internal , montaj kapsamı içindir (yani yalnızca aynı .exe veya .dll'deki koddan erişilebilir)

private sınıf kapsamı içindir (yani yalnızca aynı sınıftaki koddan erişilebilir).


6
hızlı bir sorum var; bir sınıf bir derleme içinde bir ad alanında iç sınıf karşı özel olarak ilan, her iki durumda da derleme içinde bu sınıfa erişebilir, o zaman özel sınıf ve iç sınıf arasındaki fark nedir? veya sınıfı sınıf içinde yerleştirirken kullanılan sınıflar açısından özel ve dahili değiştiriciler mi?
mayotik

2
i belirli bir proje / derleme başka bir projenin bir referans olarak ekledi ve hem özel hem de iç ad alanı içinde bu belirli sınıfa erişim engelleme, bu yüzden sonra tekrar ... özel ve iç sınıflar arasındaki fark nedir? teşekkürler
mayotik

9
Üst düzey bir sınıfı özel olarak ilan edemezsiniz. Derleyici sizi durduracaktır.
TheGateKeeper

6
@NetSkay: Genel bir sınıf içinde özel bir sınıf bildirirseniz, bu sınıfa derlemenizdeki diğer sınıflar tarafından erişilemez, ancak bu sınıfı dahili olarak bildirirseniz, derlemede erişilebilir olur. Rağmen, her ikisi de montaj dışında erişilebilir olmayacak.
Yogesh Jindal

2
Bir VB.NET arka planından geliyorsanız, C # 'ın "internal" anahtar sözcüğü VB.NET'in "Friend" anahtar kelimesine eşdeğerdir.
Brain2000

207

Aşağıda bir açıklama bulun. Daha fazla ayrıntı için bu bağlantıyı kontrol edebilirsiniz - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Özel: - Özel üyelere yalnızca kendi türünden erişilebilir (Kendi sınıfı).

Dahili: - Dahili üyeye montaj sırasında sadece miras (türetilen türü) veya sınıf örneği ile erişilebilir.

resim açıklamasını buraya girin

Referans :

dotnetbull - c # erişim değiştirici nedir


17
Daha Protected Internalgeniş erişim sağlayan ilginç Protected.
Dan Bechard

9
@ Dan, iyice katılıyorum. Okumak için yararlı ve düşünebilirsin protected internalolarak protected OR internal.
chessofnerd

7
Ne anlama With Typegeliyor?
James Wierzba

@Dan evet, sadece bir doğruluk tablosu olarak hareket edeceğini ve ANDbu matrisin true | false | false | false için olduğunu varsaydım protected internal. sezgisel değil. bunun yerine true | true | true | false gibi OR'd.
ferr

1
Bu arada, C # 7.2, seçilen gerçek anahtar kelimeler private protectedçok sezgisel olmasa da, "korumalı VE dahili" bir değiştirici ekledi . Ayrıntılar için: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell

70

internalüyeler bildirildikleri derlemedeki tüm kodlar tarafından görülebilir.
(Ve [InternalsVisibleTo]öznitelik kullanılarak başvurulan diğer derlemeler tarafından )

privateüyeler yalnızca bildiren sınıf tarafından görülebilir. (iç içe sınıflar dahil)

Bir dış (iç içe geçmiş) sınıf, privateonu özel yapacak kapsam içermediğinden bildirilemez .

Sormayı unuttuğunuz soruyu cevaplamak için protectedüyeler üyeler gibidir private, ancak bildirme türünü devralan tüm sınıflarda da görülebilirler. (Ancak en azından geçerli sınıfın türünün bir ifadesinde)


8

özel - sınıf / kapsam / yapı vb. içindeki kapsüllemeler '.

montajlarda kapsülleme.


6

Özel üyelere sadece sınıfın bünyesinde veya beyan edildikleri yapı içerisinde erişilebilir.

Dahili türlere veya üyelere yalnızca aynı montajdaki dosyalardan erişilebilir


peki bunu kullanmanın farkı nedir? hala anlamıyorum: X
deadfish

4
Özel, yalnızca Sınıf içinden erişilebilir, Dahili'ye Meclis içinden erişilebilir (VS'deki proje, yani dll / exe dosyası).
Jesper Fyhr Knudsen

3

Dahili, bağlantı havuzlarında bu sınıfı / yolculuğu devralmak ve sonuçta bir DAL sınıfına izin vermekten kaçınmak için abone olmazken, birden çok iş mantığı sınıfı arasında bir Veri Erişimi statik sınıfına (iş parçacığı güvenliği için) başvurmanıza izin verir. kamu düzeyinde erişimi teşvik etmek. Bunun tasarım ve en iyi uygulamalarda sayısız desteği vardır.

Entity Framework bu erişim türünü iyi kullanır


0

dahili üyelere meclis içinde erişilebilir (sadece aynı projede erişilebilir)

özel üyelere aynı sınıfta erişilebilir

Yeni Başlayanlar için Örnek

Bir çözümde 2 proje vardır (Proje1, Proje2) ve Proje1'in Proje2'ye bir referansı vardır.

  • Proje2'de yazılan genel yönteme Proje2 ve Proje1'den erişilebilir.
  • Project2'de yazılmış dahili yönteme yalnızca Project2'de erişilebilir ancak Project1'de erişilemez
  • Project2 sınıf1'de yazılan özel yönteme yalnızca aynı sınıf tarafından erişilebilir. Proje 1'de değil, Proje 2'nin diğer sınıflarında da erişilebilir olmayacaktır.
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.