Est-il possible d’utiliser une classe comme celle-ci (spécifique à la conception/aux directives)? J'utilise MVVM Pattern.
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
Il existe des différences significatives entre const
et public static readonly
, et vous devez choisir laquelle utiliser avec précaution:
(Par "client", je veux dire "code dans une assemblée différente faisant référence au membre.)
const
. Avec public static readonly
, ils verront la valeur mise à jour. De toute façon, si vous recompilez tous les clients, ce n'est pas un problème.const
est une constante de temps de compilation, ce qui signifie qu’elle peut être utilisée dans: Si vous êtes heureux de recompiler tous vos clients si vous modifiez jamais la valeur, les avantages du deuxième point pointent vers l'utilisation de const
.
Bien sûr, je me demande si Pages
vraiment doit être publique de toute façon ... cela ressemble à quelque chose qui pourrait être internal
, avec internal
membres - à quel point les inconvénients de const
disparaissent complètement.
Guide général d'utilisation de const
pour la définition de valeurs constantes. Si ces constantes doivent être accessibles en dehors de l'assemblage? Si non, alors le déclarer comme
internal static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
Du point de vue de la conception de votre question, il semble que l’utilisation d’un seul objet statique pour contenir toutes les références de page puisse être compliquée. Ne pouvez-vous pas simplement le stocker dans l'objet de page réel?
class view2 {
public const string PageName = "View2.xaml";
... other stuff ...
}
puis appelez-le sur les lignes de ...
goTo(view2.PageName);
Je pense que c'est l'une des meilleures choses que vous puissiez faire. Quelques suggestions supplémentaires: avec des chaînes, il est parfaitement correct d'utiliser const
s. Si vous souhaitez utiliser différents types, utilisez static readonly
, puis initialisez-le dans un constructeur static
.
Pour une approche différente en utilisant des énumérations, voir ce fil de discussion . Puisque ce que vous essayez de faire ressemble beaucoup à une enum de chaîne, cela pourrait être la voie à suivre pour vous.
Et n'oubliez pas que tant que vous spécifiez vos pages dans le code, apporter des modifications (par exemple, renommer ou déplacer une page) sera une tâche ardue. Pensez à utiliser quelque chose comme des ressources ou des sitemaps. (Dans le cas où vous seulement utilisez la classe pour une liste de pages, je voudrais utiliser des C #fortement typés ressources- ils se comporteront de la même manière comme votre classe et vous n'aurez pas à les coder à la main.)