Saya pikir akar penyebab masalah Anda adalah Anda belum memisahkan kekhawatiran Anda antara bentuk dan kontrol dengan benar.
Karena Anda memiliki kontrol (agak umum), kontrol tersebut tidak bergantung pada formulir. Seluruh logika kendali harus berada di dalam kendali itu sendiri. Formulir hanya boleh menggunakan kontrol kotak hitam: menambahkannya, mengatur bidang publik, memanggil metode publik, dll. Yang lainnya merupakan pelanggaran enkapsulasi.
Terkadang, kontrol mungkin perlu mengetahui beberapa hal tentang bentuk induknya. Dalam hal ini, saya akan menyarankan sesuatu yang sederhana seperti menambahkan bidang Parent
ke kontrol anak.
jika Anda memerlukan sesuatu yang lebih spesifik dari formulir, Anda selalu dapat menambahkan antarmuka; antarmuka seharusnya hanya mencantumkan hal-hal yang diperlukan kontrol dari formulir. Misalnya, jika Anda memerlukan ukurannya, Anda dapat menambahkan:
public interface IControlParent {
int Width { get; }
int Height { get; }
}
Dengan cara ini, Anda melihat dengan jelas dependensinya (apa yang dibutuhkan kontrol dari induknya), dan jika jenis/kontrak induknya berubah, Anda tidak perlu melakukan banyak hal untuk mengubah kelas kontrol Anda.
person
ashes999
schedule
22.04.2014