Mengakses Kelas Dalaman daripada Perhimpunan Luaran
Dalam senario di mana pemasangan luaran memerlukan akses kepada objek jenis dalaman dalam pembekal yang dibekalkan oleh vendor perhimpunan, kesusahan timbul. Artikel ini meneroka cara untuk mengatasi cabaran ini tanpa mengubah suai pemasangan vendor.
Dilema
Pertimbangkan senario berikut: pemasangan luaran mengandungi objek yang dikembalikan melalui kaedah dalam perhimpunan vendor. Walau bagaimanapun, objek ini sebenarnya adalah contoh kelas dalaman yang medan dan kaedahnya tidak boleh diakses daripada perhimpunan luaran.
// Vendor assembly public class Vendor { private InternalClass _internal; public object Tag { get { return _internal; } } } // External assembly public class MyClass { public void AccessTest() { Vendor vendor = new Vendor(); object value = vendor.Tag; // Here we want to access InternalClass.test } }
A Penyelesaian: InternalsVisibleTo Attribute
Oleh lalai, ahli dalaman hanya boleh diakses dalam perhimpunan yang ditakrifkan. Walau bagaimanapun, terdapat pengecualian untuk perhimpunan "rakan".
Untuk memberikan perhimpunan luaran (himpunan "rakan") akses kepada ahli dalaman, tambahkan atribut [assembly: InternalsVisibleTo] pada fail AssemblyInfo.cs bagi pemasangan vendor.
[assembly: InternalsVisibleTo("NameOfFriendAssembly")]
Atribut ini membenarkan pemasangan luaran mengakses ahli dalaman pemasangan vendor seolah-olah mereka dalaman sendiri perhimpunan.
Nota: Penyelesaian ini hanya sesuai untuk tujuan ujian, kerana ia mendedahkan ahli dalaman kepada perhimpunan luaran.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kelas Dalaman daripada Perhimpunan Luaran Tanpa Mengubah Suai Perhimpunan Penjual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!