public
terlihat dari mana saja.
internal
hanya terlihat di dalam majelis
Anda cenderung menggunakan hanya internal untuk melindungi API internal. Misalnya, Anda dapat mengekspos beberapa kelebihan metode:
public int Add(int x, int y)
public int Add(int x,int y, int z)
Keduanya memanggil metode internal
internal int Add(int[] numbers)
Anda kemudian dapat menambahkan banyak kecanggihan pada suatu metode, tetapi "melindunginya" menggunakan metode fasad yang dapat membantu pemrogram untuk memanggil metode tersebut dengan benar. (Metode implementasi dengan parameter array mungkin memiliki batas nilai yang berubah-ubah, misalnya.)
Juga perlu dicatat bahwa menggunakan Refleksi, setiap dan semua metode dapat dipanggil terlepas dari visibilitasnya. "Retasan" lainnya untuk mengontrol / mendapatkan akses ke API yang tersembunyi secara internal.
internal
dan semua metodepublic
. Jika Anda membutuhkan visibilitas yang lebih tinggi, Anda dapat menyetel kembali seluruh kelaspublic
. Tapi saya tidak yakin, apakah itu dimaksudkan untuk digunakan seperti ini atau tidak. Jadi saya terus googling ... edit Et voilà, topik yang sama: stackoverflow.com/questions/9302236/…internal
berguna ketika Anda ingin mendeklarasikan anggota atau tipe di dalam DLL, bukan di luar itu ...biasanya, ketika Anda mendeklarasikan anggota sebagai
Public
Anda dapat mengaksesnya dari DLL lain. tetapi, jika Anda perlu mendeklarasikan sesuatu menjadi publik tepat di dalam perpustakaan kelas Anda, Anda dapat mendeklarasikannya sebagaiInternal
.dalam definisi formal: anggota internal hanya terlihat di dalam majelis saat ini ...
sumber
internal
juga berguna saat menulis tes unit. TheInternalsVisibleTo
atribut mari kita uji Anda akses perakitan metode internal dalam kode Anda perakitan. Yaitu Anda dapat menguji metode yang tampak pribadi bagi dunia luar tanpa menggunakan refleksi.sumber
Publik juga bisa diakses di luar majelis. Jadi, ketika Anda memiliki kelas yang seharusnya tidak dapat diakses, setiap kelas di assembly harus dapat mengaksesnya, maka internal adalah hal yang benar. Jika Anda membutuhkan akses luar, gunakan publik.
sumber
Juga, properti yang ditandai sebagai
internal
akan menampilkanBindingExpression path error
if digunakan untuk DataBinding di WPF. Jadi itu haruspublic
agar berfungsi dengan benar, bahkan ketika DataBinding berlangsung dalam rakitan yang sama.sumber
Secara umum,
public
metode harus memenuhi standar yang sangat tinggi untuk ketahanan (tidak merusak atau merusak data karena masukan yang buruk) dan kesadaran keamanan (tidak mengizinkan masukan tak terduga untuk memicu eksploitasi). Tetapi untukinternal
,,protected
danprivate
metode, sering kali masuk akal untuk mengikuti standar yang lebih santai, karena seseorang memiliki kendali penuh atas masukan apa yang dapat diterima setiap metode.Karena parameter yang diteruskan ke
public
metode (mungkin dari sumber eksternal) dianggap kurang dapat dipercaya daripada parameter yang diterima dari dalam rakitannya sendiri, metode yang ditandaipublic
sering diperlakukan berbeda oleh penganalisis kode daripada metode identik yang ditandai sebagaiinternal
. Sebagai contoh, denganpublic
metode penganalisis dapat memperingatkan Anda untuk memeriksa bahwa parameter metode tidak null. Denganinternal
metode, dimungkinkan untuk mengkonfigurasi penganalisis agar tidak terlalu ketat dalamnull
pemeriksaan. Atau penganalisis mungkin dapat menentukan sendiri, dengan melakukan analisis aliran dari semua file sumber untuk perakitan, itunull
tidak akan pernah diteruskan ke metode tertentu sebagai argumen, dan dengan demikian menentukan tidak perlu memeriksa apakah parameternya adanull
. Ada banyak contoh lain dari penganalisis yang memperlakukanpublic
daninternal
metode secara berbeda.Dengan menandai kelas, metode, properti, bidang, antarmuka, dll dengan benar dengan pengubah akses yang benar, Anda memberi sinyal yang benar ke penganalisis kode maksud Anda, dan sebagai gantinya penganalisis dapat memberikan pesan peringatan dan saran yang lebih relevan.
sumber
Jika Anda dapat mereferensikan assemble dari luar, Anda memiliki lingkup kelas Internal dan publik
sumber