Pengantar Majelis Youyuan Kita tahu bahwa anggota kelas yang didefinisikan sebagai internal (termasuk jenis, metode, properti, variabel, peristiwa) hanya dapat diakses dalam rakitan yang sama (tentu saja, saya berbicara tentang cara normal di sini, tidak termasuk akses melalui refleksi). Aturan ini ada di . .NET 2.0 sedikit rusak, memungkinkan kami mengatur anggota internal rakitan untuk diakses oleh anggota tertentu. Kita menyebut rakitan yang berisi anggota internal ini sebagai rakitan sumber, dan kumpulan perakitan disebut rakitan teman.
Penggunaan perakitan teman Atribut ini digunakan di tingkat perakitan.
Dengan cara ini, setelah program FriendAssembly mereferensikan rakitan, ia dapat mengakses properti Name internal. Secara umum, rakitan ini:InternalsVisibleTo("FriendAssembly") lebih baik ditempatkan di AssemblyInfo.cs, bagaimanapun juga, itu berada di tingkat perakitan.
Kapan menggunakan InternalsToVisibleTo Faktanya, atribut ini tidak digunakan dalam aplikasi umum, dan kita tidak boleh menyalahgunakan atribut ini. Karena pada umumnya, rakitan yang dirancang dengan baik tidak perlu terbuka terhadap dunia luar. Tetapi skenario pengujian unit dapat memanfaatkan fitur ini. Dengan fitur ini, kita dapat menentukan bahwa kode untuk pengujian unit memiliki akses ke anggota internal tersebut sehingga kita dapat menguji anggota tersebut. Namun, ini memerlukan penulisan nama rakitan teman mati di rakitan sumber, yang menyebabkan beberapa masalah keamanan. Keamanan dapat dijamin dengan memperkenalkan rakitan tanda tangan.
InternalsToVisibleTo dan rakitan tanda tangan Anda dapat langsung menentukan nama dan kunci publik rakitan meta teman ke InternalsVisibleTo. Gunakan baris perintah pengembang VS untuk menghasilkan kunci publik untuk FriendAssembly:
Tentukan nama rakitan teman dan kunci publik ke rakitan sumber:
Faktanya, karena rakitan teman mereferensikan rakitan sumber, dan rakitan yang ditandatangani mereferensikan rakitan yang tidak ditandatangani, dan rakitan yang ditandatangani tidak dapat menentukan rakitan teman yang tidak ditandatangani, salah satu dari mereka ditandatangani, maka mereka perlu ditandatangani.
|