2009-04-22 74 views
0

我在AppSettings中保留了很多設置,而且我想知道在UpperCase中將它們命名是否是一種很好的做法。本質上,它們與常量相同嗎?據我瞭解,如果你改變了Web.Config,應用程序會重新編譯。如何從Web.Config中檢索時將變量定義爲CONSTANT?

所以,我在想,你應該保持在設置中的AppSettings大寫(假設你所有的大寫命名的常量。)

而且,應該說得到的AppSettings值的變量是大寫?

EG。

String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"]; 

什麼是最好的方式來處理這些,使他們看起來和感覺像常量?這是一個好主意嗎?我能想到的唯一辦法是隻讀使其:

readonly String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"]; 

但是當時我不知道你會如何與一個int做到這一點:

readonly String MAX_USERS_S = ConfigurationManager.AppSettings["MAX_USERS"]; 
readonly int MAX_USERS; // needs to be set here... won't compile 
int.TryParse(MAX_USERS_S, out MAX_USERS); 

我莫名其妙地覺得髒設置只讀變量看起來像常量,但對我來說,web.config中的東西基本上是不變的。

對此提出建議?

回答

1

如果你希望它們的外觀和感覺像常量,我建議的第一個地方是用Pascal-case命名它們,所以MY_SETTING(它不是一個類似C#的名稱)將是「MySetting」。您可以在框架中看到很多公開暴露的屬性和常量。

只讀是去這裏的正確方法。在實例字段的情況下,它只能在聲明或構造函數中設置。對於靜態字段,它只能在靜態構造函數或聲明中設置。

對於調用的TryParse,你會設定在你的構造函數或靜態構造函數,這取決於它是否是一個實例或靜態字段:

static MyClass() 
{ 
    // The value. 
    int myUsers; 

    // Try to parse. 
    if (int.TryParse(MAX_USERS_S, out myUsers)) 
    { 
     // Assign. 
     MyUsers = myUsers; 
    } 
} 
1

不可以。在.NET naming guidelines中沒有全大寫命名的情況。

+0

命名準則與否。公司也有命名準則。 – Armstrongest 2009-04-22 23:09:49

+0

如果您有自己的命名指南,您當然可以優先使用它們。但是我沒有看到這個問題的關鍵。注意命名準則應適合所討論工具的習慣用法。 – Richard 2009-04-23 08:39:30

2

如果你覺得它們實際上是恆定的,並且它們是不可變類型的只讀變量(int,string等),那麼通過一切手段使用相同的命名約定。的確,這是String.Empty所做的。但是,常量的.NET naming convention不是SHOUTY_CAPS,它是PascalCase

+0

雖然與公共變量不一樣嗎? – Armstrongest 2009-04-22 16:22:25

1

據我瞭解,如果你改變了Web.Config,應用程序會重新編譯。

沒錯,對Web.Config的任何更改都會重新編譯應用程序。甚至像換行符一樣小。


忽略的命名約定的問題,你可以做你的榜樣如下:

readonly int MAX_USERS = 
    int.Parse(ConfigurationManager.AppSettings["MAX_USERS"]) 

顯然,這不是一個安全的方式做到這一點的事件MAX_USERS不是一個整數,但當MAX_USERS無法設置時,似乎拋出異常將是正確的行動方案。