Pengubah Akses Internal vs. Pribadi

Jawaban:

516

internal untuk ruang lingkup perakitan (yaitu hanya dapat diakses dari kode dalam .exe atau .dll yang sama)

privat untuk ruang lingkup kelas (yaitu hanya dapat diakses dari kode di kelas yang sama).

penjelajah
sumber
6
saya punya pertanyaan cepat; jika saya mendeklarasikan kelas sebagai privat dalam namespace di dalam assembly versus kelas yang internal, saya dapat mengakses kelas itu di assembly dalam kedua kasus, lalu apa perbedaan antara kelas privat dan kelas internal? atau apakah pengubah pribadi dan internal dalam hal kelas yang digunakan saat kelas bersarang di dalam kelas?
Mayotic
2
saya menambahkan proyek / perakitan khusus sebagai referensi dari proyek lain dan baik pribadi maupun internal mencegah saya mengakses kelas khusus ini dalam namespace, jadi sekali lagi ... perbedaan antara kelas privat dan internal? berkat
mayotic
9
Anda tidak dapat mendeklarasikan kelas tingkat atas sebagai pribadi. Kompiler akan menghentikan Anda.
TheGateKeeper
6
@ NetSkay: Jika Anda mendeklarasikan kelas privat di dalam kelas publik maka kelas ini tidak dapat diakses oleh kelas-kelas lain di majelis Anda tetapi jika Anda mendeklarasikan kelas ini sebagai internal maka kelas tersebut akan dapat diakses di majelis. Meskipun, keduanya tidak dapat diakses di luar majelis.
Yogesh Jindal
2
Jika Anda berasal dari latar belakang VB.NET, kata kunci "internal" C # setara dengan kata kunci "Teman" VB.NET.
Brain2000
207

Temukan penjelasan di bawah ini. Anda dapat memeriksa tautan ini untuk detail lebih lanjut - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Pribadi: - Anggota pribadi hanya dapat diakses dalam tipe sendiri (Kelas sendiri).

Internal: - Anggota internal hanya dapat diakses dalam perakitan dengan warisan (jenis turunannya) atau dengan instance kelas.

masukkan deskripsi gambar di sini

Referensi:

dotnetbull - apa itu pengubah akses di c #

Vivek
sumber
17
Menarik yang Protected Internalmenyediakan akses lebih luas daripada Protected.
Dan Bechard
9
@Dan, sepenuhnya setuju. Mungkin bermanfaat untuk membaca dan menganggapnya protected internalsebagai protected OR internal.
chessofnerd
7
Apa With Typeartinya
James Wierzba
@Dan ya, saya berasumsi itu hanya akan bertindak sebagai tabel kebenaran dan ANDmatriks itu menjadi true | false | false | false for protected internal. tidak intuitif. sebaliknya itu benar | benar | benar | salah seolah-olah OR'd.
fer
1
Kebetulan, C # 7.2 baru saja menambahkan pengubah "dilindungi DAN internal", meskipun kata kunci yang sebenarnya dipilih, private protectedtidak terlalu intuitif. Untuk detail: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell
70

internalanggota terlihat oleh semua kode dalam majelis yang dideklarasikan.
(Dan untuk majelis lain yang dirujuk menggunakan [InternalsVisibleTo]atribut )

privateanggota hanya dapat dilihat oleh kelas yang mendeklarasikan. (termasuk kelas bersarang)

Kelas luar (tidak bersarang) tidak dapat dideklarasikan private , karena tidak ada ruang lingkup untuk menjadikannya pribadi.

Untuk menjawab pertanyaan yang Anda lupa tanyakan, protectedanggota seperti privateanggota, tetapi juga terlihat di semua kelas yang mewarisi tipe pernyataan. (Tetapi hanya pada ekspresi setidaknya jenis kelas saat ini)

Slaks
sumber
8

privat - enkapsulasi dalam kelas / ruang lingkup / struct ect '.

internal - enkapsulasi dalam majelis.

Yaniv Lugassy
sumber
6

Anggota pribadi hanya dapat diakses di dalam tubuh kelas atau struct di mana mereka dideklarasikan.

Jenis atau anggota internal hanya dapat diakses di dalam file dalam rakitan yang sama

Jesper Fyhr Knudsen
sumber
jadi apa bedanya menggunakan ini? saya masih belum mengerti: X
deadfish
4
Pribadi hanya dapat diakses dari dalam Kelas, Internal dapat diakses dari dalam Majelis (proyek dalam VS yaitu file dll / exe).
Jesper Fyhr Knudsen
3

Internal akan memungkinkan Anda untuk merujuk, misalnya, kelas statis Akses Data (untuk keselamatan thread) antara beberapa kelas logika bisnis, sementara tidak berlangganan mereka untuk mewarisi kelas / tersandung satu sama lain dalam kumpulan koneksi, dan untuk akhirnya menghindari mengizinkan kelas DAL untuk mempromosikan akses di tingkat publik. Ini memiliki dukungan yang tak terhitung jumlahnya dalam desain dan praktik terbaik.

Entity Framework memanfaatkan jenis akses ini dengan baik

Nathan Teague
sumber
0

anggota internal dapat diakses dalam majelis (hanya dapat diakses dalam proyek yang sama)

anggota pribadi dapat diakses dalam kelas yang sama

Contoh untuk Pemula

Ada 2 proyek dalam solusi (Project1, Project2) dan Project1 memiliki referensi ke Project2.

  • Metode publik yang ditulis dalam Project2 akan dapat diakses di Project2 dan Project1
  • Metode internal yang ditulis dalam Project2 akan dapat diakses hanya di Project2 tetapi tidak di Project1
  • metode pribadi yang ditulis dalam class1 Project2 hanya akan dapat diakses ke kelas yang sama. Ini tidak akan dapat diakses di kelas lain dari Proyek 2 bukan di Proyek 1.
Salik
sumber