Keamanan Properti Dependensi
Properti dependensi umumnya harus dianggap sebagai properti publik. Sifat sistem properti Windows Presentation Foundation (WPF) mencegah kemampuan untuk membuat jaminan keamanan tentang nilai properti dependensi.
Akses dan Keamanan Pembungkus dan Properti Dependensi
Biasanya, properti dependensi diimplementasikan bersama dengan properti runtime bahasa umum (CLR) "wrapper" yang menyederhanakan mendapatkan atau mengatur properti dari instans. Tetapi pembungkus benar-benar hanya metode kenyamanan yang mengimplementasikan GetValue panggilan mendasar dan SetValue statis yang digunakan saat berinteraksi dengan properti dependensi. Memikirkannya dengan cara lain, properti diekspos sebagai properti common language runtime (CLR) yang kebetulan didukung oleh properti dependensi daripada oleh bidang privat. Mekanisme keamanan yang diterapkan pada pembungkus tidak sejajar dengan perilaku sistem properti dan akses properti dependensi yang mendasar. Menempatkan permintaan keamanan pada pembungkus hanya akan mencegah penggunaan metode kenyamanan tetapi tidak akan mencegah panggilan ke GetValue atau SetValue. Demikian pula, menempatkan tingkat akses yang dilindungi atau privat pada pembungkus tidak memberikan keamanan yang efektif.
Jika Anda menulis properti dependensi Anda sendiri, Anda harus mendeklarasikan pembungkus dan DependencyProperty bidang pengidentifikasi sebagai anggota publik, sehingga penelepon tidak mendapatkan informasi yang menyesatkan tentang tingkat akses sebenarnya dari properti tersebut (karena penyimpanannya diimplementasikan sebagai properti dependensi).
Untuk properti dependensi kustom, Anda dapat mendaftarkan properti Anda sebagai properti dependensi baca-saja, dan ini memberikan cara yang efektif untuk mencegah properti ditetapkan oleh siapa pun yang tidak memegang referensi ke properti tersebut DependencyPropertyKey . Untuk informasi selengkapnya, lihat Properti Dependensi Baca-Saja.
Catatan
Mendeklarasikan DependencyProperty bidang pengidentifikasi privat tidak dilarang, dan dapat digunakan untuk membantu mengurangi namespace layanan yang segera diekspos dari kelas kustom, tetapi properti seperti itu tidak boleh dianggap "privat" dalam arti yang sama seperti definisi bahasa umum runtime bahasa umum (CLR) menentukan tingkat akses tersebut, karena alasan yang dijelaskan di bagian berikutnya.
Eksposur Sistem Properti Properti Dependensi
Ini umumnya tidak berguna, dan berpotensi menyesatkan, untuk mendeklarasikan DependencyProperty sebagai tingkat akses apa pun selain publik. Pengaturan tingkat akses tersebut hanya mencegah seseorang mendapatkan referensi ke instans dari kelas deklarasikan. Tetapi ada beberapa aspek sistem properti yang akan mengembalikan DependencyProperty sebagai sarana untuk mengidentifikasi properti tertentu karena ada pada instans kelas atau instans kelas turunan, dan pengidentifikasi ini masih dapat digunakan dalam SetValue panggilan bahkan jika pengidentifikasi statis asli dinyatakan sebagai nonpublik. Selain itu, OnPropertyChanged metode virtual menerima informasi properti dependensi yang ada yang mengubah nilai. Selain itu, metode mengembalikan GetLocalValueEnumerator pengidentifikasi untuk properti apa pun pada instans dengan nilai yang ditetapkan secara lokal.
Validasi dan Keamanan
Menerapkan permintaan ke dan ValidateValueCallback mengharapkan kegagalan validasi pada kegagalan permintaan untuk mencegah properti ditetapkan bukanlah mekanisme keamanan yang memadai. Invalidasi set-value yang diberlakukan melalui ValidateValueCallback juga dapat ditekan oleh penelepon berbahaya, jika penelepon tersebut beroperasi dalam domain aplikasi.
Baca juga
.NET Desktop feedback