Stringa const pubblica?

Va bene usare una class come questa (design / linee guida specifiche)? Sto usando MVVM Pattern.

public static class Pages { public const string Home = "Home.xaml"; public const string View2 = "View2.xaml"; /* a few more... */ } 

Esistono differenze significative tra const e public static readonly , e dovresti considerare quale usare con cura:

(Per “cliente” qui, intendo “codice in un assembly diverso che si riferisce al membro.)

  • Se si modifica il valore ma non si ricompilano i client, utilizzeranno comunque il valore originale se si utilizza const . Con public static readonly , vedranno il valore aggiornato. Se ricompilate comunque tutti i client, questo non è un problema.
  • Solo la forma const è una costante di tempo di compilazione, il che significa che può essere utilizzata in:
    • Argomenti degli attributi
    • Cambia istruzioni
    • Dichiarazioni dei parametri opzionali

Se sei felice di ricompilare tutti i tuoi clienti se cambi mai il valore, i benefici del secondo punto puntato puntano all’utilizzo di const .

Chiaramente, mi chiedo se Pages davvero bisogno di essere pubblico comunque … sembra qualcosa che potrebbe essere internal , con membri internal – a quel punto i lati negativi di const completamente.

Dal punto di vista del design della tua domanda, sembra che potrebbe diventare fastidioso usando un singolo object statico per contenere tutti i riferimenti di pagina. Non puoi semplicemente memorizzarlo nell’object di pagina vero?

 class view2 { public const string PageName = "View2.xaml"; ... other stuff ... } 

quindi chiamalo seguendo le linee di …

 goTo(view2.PageName); 

Una linea guida generale quando si usa const per definire i valori costanti. Se è necessario accedere a queste costanti al di fuori dell’assemblaggio? In caso contrario, dichiararlo come

 internal static class Pages { public const string Home = "Home.xaml"; public const string View2 = "View2.xaml"; /* a few more... */ } 

Penso che questa sia una delle migliori cose che puoi fare. Alcuni altri suggerimenti: con le stringhe è perfettamente const usare const s. Nel caso in cui si desideri utilizzare tipi diversi, utilizzare static readonly e quindi inizializzare in un costruttore static .

Per un approccio diverso usando l’enumerazione, vedi questa discussione . Dal momento che ciò che stai cercando di fare assomiglia molto a un enum stringa, quella potrebbe essere la strada giusta per te.

E non dimenticare che fino a quando specifichi le tue pagine in codice, apportare modifiche (ad es. Rinominare o spostare una pagina) sarà un problema. Prendi in considerazione l’utilizzo di qualcosa come risorse o sitemap. (Nel caso in cui usi la class solo per un elenco di pagine, utilizzerei le risorse fortemente tipizzate di C # – si comporteranno nello stesso modo della tua class e non dovrai codificarle a mano.)