Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk selamat melemparkan generik ke generik dalam usercontrol WPF?

Bagaimana untuk selamat melemparkan generik ke generik dalam usercontrol WPF?

Susan Sarandon
Susan Sarandonasal
2025-01-28 18:46:11241semak imbas

Panduan Penukaran Keselamatan UserControl WPF

Di WPF, apabila UserControl yang diperolehi mewarisi kelas berasaskan diri dan fungsi awam yang dikongsi, kod yang tersembunyi oleh usercontrol yang diperolehi boleh merujuk pemprosesan kelas asas. Walau bagaimanapun, akses kepada DataContext dari kelas asas boleh menyebabkan InvalidCastException kerana ia adalah jenis derivatif dalam usercontrol derivatif.

mari kita lihat contoh:

<code class="language-csharp">private void SomeClick(object sender, RoutedEventArgs e) {
    HandleClick(sender);
    MyDataGrid.Items.Refresh();
}</code>

di kelas asas usercontrol:

<code class="language-csharp">public class BaseUserControl : UserControl {
   protected void HandleClick(object sender) {
       var vm = (BaseViewModel<Part>)DataContext;
       ...
   }
}</code>

Ini akan menyebabkan InvalidCastException, kerana jenis DataContext dalam UserControls mungkin BaseViewModel atau BaseViewModel .

How to Safely Cast Generic to Generic in WPF UserControls?

Kenapa tidak boleh diubah secara langsung?

Menukar Geneic & LT; Pertimbangkan contoh berikut:

Jika penukaran ini dibenarkan, domba ditambah kepada haiwan, dan ia sebenarnya dibenarkan menambahkannya kepada serigala, menyebabkan jenis tidak sepadan.

penyelesaian
<code class="language-csharp">List<wolf> wolves = new List<wolf>();
List<animal> animals = (List<animal>)wolves; // 无法转换</code>

Untuk menyelesaikan masalah ini, kerjasama atau penyongsang antara muka boleh dipaksa untuk membaca hanya jenis yang diperlukan. Walau bagaimanapun, kaedah ini hanya boleh dilaksanakan hanya apabila kelas yang anda rujuk mencapai antara muka yang diperlukan. Ini memerlukan pelarasan struktur kod. Pelaksanaan spesifik bergantung kepada definisi dan keperluan sebenar .

Atas ialah kandungan terperinci Bagaimana untuk selamat melemparkan generik ke generik dalam usercontrol WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn