Apakah mungkin untuk memiliki dua bagian (namespace yang sama, nama kelas yang sama) ke kelas parsial dalam DLL terpisah?
Apakah mungkin untuk memiliki dua bagian (namespace yang sama, nama kelas yang sama) ke kelas parsial dalam DLL terpisah?
Jawaban:
Dari MSDN -Kelas dan Metode Darurat :
Semua definisi tipe parsial yang dimaksudkan sebagai bagian dari tipe yang sama harus didefinisikan dalam rakitan yang sama dan modul yang sama (file .exe atau .dll). Definisi parsial tidak dapat menjangkau beberapa modul.
Tidak. Kelas parsial adalah fitur bahasa murni. Saat perakitan dikompilasi, file-file tersebut digabungkan untuk membuat tipe. Tidak mungkin untuk menyebar file ke majelis yang berbeda.
Bergantung pada apa yang ingin Anda lakukan, Anda mungkin dapat menggunakan metode ekstensi untuk mencapai apa yang Anda butuhkan.
Tidak itu tidak mungkin. Ketika perakitan dikompilasi, kelas harus diselesaikan.
Sementara jawaban lain memberikan "Tidak" yang tidak menyenangkan bahwa siapa pun yang mendarat di halaman ini tidak ingin melihat atau mendengar, saya dikejutkan oleh pemikiran lain yang belum disebutkan di sini. Jika kelas parsial diizinkan di seluruh majelis, seseorang akan mendapatkan akses ke anggota pribadi dari jenis yang ada yang tidak ditulis olehnya, sehingga memungkinkannya untuk memanipulasi mereka dengan cara yang tidak dimaksudkan oleh penulis asli, sehingga membahayakan fungsionalitas semua kelas yang mewarisi terlalu.
Tidak hanya itu, kelas-kelas di majelis lain (dan anak-anak mereka) perlu dikompilasi ulang untuk membuatnya bekerja. Dengan demikian secara logis tidak mungkin untuk memungkinkan pemisahan kelas pada majelis yang berbeda.
Anda dapat menggunakan metode ekstensi ketika Anda ingin menambahkan metode ke kelas di dll yang berbeda. Satu kelemahan dari metode ini adalah Anda tidak dapat menambahkan metode statis.
Pertanyaannya adalah mengapa Anda ingin membuat kelas parsial di majelis lain? Anda dapat mendefinisikan kelas dan antarmuka abstrak di seluruh majelis, mungkin Anda perlu melihatnya.
Anda mungkin hanya ingin membuat kelas Wrapper di perpustakaan Anda sendiri, sekitar kelas di perpustakaan bagian ke-3. Kemudian tambahkan fungsionalitas apa pun ke kelas pembungkus.