2010-05-17 7 views
4

Je suis en train d'écrire mon propre abstraction sur l'énumération MessageBoxImage, et voir que MessageBoxImage est défini comme:Pourquoi System.Windows.MessageBoxImage a-t-il des sous-éléments d'énumération ayant la même valeur?

namespace System.Windows 
    { 
     public enum MessageBoxImage 
     { 
      None = 0, 
      Error = 16, 
      Hand = 16, 
      Stop = 16, 
      Question = 32, 
      Exclamation = 48, 
      Warning = 48, 
      Asterisk = 64, 
      Information = 64, 
     } 
    } 

Comment la méthode Show déterminer si vous souhaitez afficher une image d'erreur ou une image à la main? Comment écrire une méthode qui prend un type MessageBoxImage et renvoyer un type CustomMessageBoxImage qui correspond au type MessageBoxImage, car je ne peux pas inclure à la fois MessageBoxImage.Error et MessageBoxImage.Hand dans la même instruction switch?

+0

Vous n'avez pas besoin de les inclure à la fois dans la même instruction switch, car ils ont tous deux la même valeur. Cela signifie qu'ils sont équivalents en ce qui concerne l'ordinateur. –

Répondre

4

Historiquement, il y avait différentes icônes qui ont fini par être fusionnées en une seule image d'icône réelle. Il existe donc plusieurs valeurs de type énumérées (Hand et Stop par exemple) qui signifient simplement la même chose dans les systèmes d'exploitation Windows modernes. Il n'y a pas de différence entre eux, ils sont simplement des alias. Si vous souhaitez avoir de nouvelles valeurs pour représenter les différences, vous pouvez utiliser une variable secondaire (par exemple "isError") pour indiquer la différence que vous souhaitez appliquer entre Stop et Hand. Vous pouvez également copier la valeur Icon dans un int et définissez un bit haut dans la valeur pour indiquer cette information supplémentaire afin qu'elle puisse être "portée" dans une seule variable ou vous pouvez utiliser votre propre énumération qui n'est "pas liée" au MessageBoxIcon, et avoir des méthodes qui convertissent votre valeur en La valeur de MessageBoxIcon

Je suggérerais avoir votre propre valeur de «statut» et puis convertissant cela en une valeur d'icône en tant que nécessaire - les deux transmettent des informations assez différentes, essayant ainsi de surcharger (corrompu) la valeur de MessageBox pour transmettre informations supplémentaires ne serait pas un très bon ach.

+0

Merci Jason, je vais prendre cette approche – devdigital