Maison >développement back-end >C++ >Comment lancer en toute sécurité générique à générique dans WPF UserControls?

Comment lancer en toute sécurité générique à générique dans WPF UserControls?

Susan Sarandon
Susan Sarandonoriginal
2025-01-28 18:46:11261parcourir

WPF UserControl Fonction Security Conversion Guide

Dans WPF, lorsque l'UserControl dérivé hérite de la classe auto-basée et des fonctions publiques partagées, le code caché par les dérivés userControls peut référencer le traitement de la classe de base. Cependant, l'accès à DataConText à partir de la classe de base peut provoquer InvalidcastException car il s'agit d'un type dérivé dans les dérivés userControls.

Jetons un coup d'œil à un exemple:

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

dans la classe de base userControl:

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

Cela provoquera InvalidCastException, car le type de DataConText dans UserControls peut être BaseViewModel ou BaseViewModel .

How to Safely Cast Generic to Generic in WPF UserControls?

Pourquoi ne peut-il pas être modifié directement?

Convertir Geneic & LT; Considérez l'exemple suivant:

Si cette conversion est autorisée, un mouton est ajouté aux animaux, et il est en fait autorisé à l'ajouter aux loups, ce qui ne correspond pas au type.

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

Afin de résoudre ce problème, la collaboration ou l'onduleur de l'interface peut être obligé de lire uniquement le type requis. Cependant, cette méthode ne peut être possible que lorsque la classe que vous avez référencée atteint l'interface nécessaire. Cela nécessite un ajustement de la structure du code. L'implémentation spécifique dépend de la définition et des besoins réels de .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn