可以使用這樣的類(設計/指南特定)嗎?我正在使用MVVM模式。公共const字符串?
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
可以使用這樣的類(設計/指南特定)嗎?我正在使用MVVM模式。公共const字符串?
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
有const
和public static readonly
之間顯著的差別,你應該考慮其中小心使用:在不同的
(通過「客戶端」在這裏,我的意思是「代碼裝配指成員。)
const
他們仍然使用原來的價值。隨着public static readonly
,他們將看到更新後的值。如果重新編譯所有客戶任何方式,這不是問題。const
形式是一個編譯時間常數,這意味着它可以用在:
如果」很高興重新編譯所有的客戶,如果你改變了價值,第二個項目符號點的好處是使用const
。
當然,我不知道Pages
真的是否需要是公共反正...聽起來有點像這可能是internal
,與internal
成員 - 此時的const
的缺點完全消失。
使用const
定義常數值時的一般準則。這些常量是否要在程序集外部訪問?如果沒有,那麼它聲明爲
internal static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
在給出「使用靜態只讀而不是const」的通用建議之前,肯定值得理解利弊。考慮一下如果組件X發生變化,所有客戶端都將被重建 - 這是業務中相當常見的上下文。這是否改變了你的建議? –
@JonSkeet這不是你必須使用只讀的東西!我已經回答了一個問題。我並不認爲在這種情況下公開課是必要的,所以我建議使用內部課程。另外,我認爲了解const和readonly的工作方式非常有用,因此,項目的鏈接。無論如何,我應該同意你在這裏提出的建議。 :-) – AksharRoop
那麼,你基本上說:「如果它需要公開,請使用公共靜態只讀。」如果有人在閱讀本網站時沒有發現有效的C#,那麼即使它應該公開,實際上它不適用的建議也不會立即得到啓發。 –
從您的問題的設計角度來看,它似乎可以使用單個靜態對象快速混亂以包含所有頁面引用。你不能把它存儲在實際的頁面對象中嗎?
class view2 {
public const string PageName = "View2.xaml";
... other stuff ...
}
然後調用它的線沿線的...
goTo(view2.PageName);
我覺得這是你能做的最好的事情之一。 一些更多的建議:使用字符串,使用const
s是完全正確的。如果您想使用不同類型,請使用static readonly
,然後在static
構造函數中進行初始化。請參閱this thread。因爲你想要做的事情看起來很像一個字符串枚舉,這可能是你的方式。
不要忘記,只要您在代碼中指定頁面,進行更改(例如重命名或移動頁面)將會很痛苦。考慮使用資源或站點地圖等。 (如果你只使用類的頁列表,我會使用C#的強類型資源去 - 他們的行爲以同樣的方式爲你的類,你不會有他們的代碼)
對於公開的可見性,我寧願把'static readonly'改爲'const',因爲那樣你就可以在不需要重新編譯的情況下改變這個值。 – mgronber
@mgronber:這取決於上下文。在我開發的大多數情況下,如果更改一個程序集,則最終會在使用新版本之前重新編譯該程序集的客戶端。 –