Maison >développement back-end >C++ >Comment lancer en toute sécurité générique à générique dans WPF UserControls?
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
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!