2011-02-17 87 views
2

我從Java世界即將結束,這個結構是推動我堅果:理解C#屬性的語法和getter/setter方法

private static string _muiUrl; 

    private static string MUIUrl 
    { 
     get 
     { 
      if (String.IsNullOrEmpty(_muiUrl)) 
      { 
       using (var db = new IntLMPDB()) 
       { 
        _muiUrl = 
         (from c in db.Control where c.ControlKey == "MUI_Url" select c.ControlValue).FirstOrDefault(); 
       } 
      } 
      return _muiUrl; 
     } 
    } 

當我看到,在一類,我想用在該屬性班級本身,我應該怎麼稱呼它?

回答

3

簡單如下:

var result = TypeWithMUIURLProperty.MUIUrl; 

可以如其他人所說省略類的名字,但是,明確性,我將它留在這個例子。

+1

-1這是一個靜態屬性。您無法使用`this`關鍵字訪問靜態屬性。 – 2011-02-17 18:50:46

+0

我的編輯和您的輸入似乎有重疊。 – 2011-02-17 18:52:32

0

從課內,只要寫MUIUrl應該可以。這會拉一個初始化的值,並強制延遲實例化。

如果它是公開的,並且您從其他地方訪問它,則需要編寫YourClassName.MUIUrl。但由於它是私人的,這是不必要的。

此外,只需使用MUIUrl即可在實例或其他靜態成員中使用。

1

類裏面,你並不需要在所有限定屬性名稱,即你寫的只是

string url = MUIUrl; 

只好不僅僅是private財產被一些「更好」,從完全訪問屬性不同的類,你需要使用類名出線它(但你被允許這樣做,甚至裏面的類,它只是不要求),即

string url = ThatClassYouDidNotName.MUIUrl; 

(邊備註:此變種懶惰初始化通常不是線程安全的。)

0

當我實現具有專用後備存儲的自加載屬性時,我遵循從不與後備存儲交互的約定,請始終從屬性中讀取。

我覺得你需要私人領域很愚蠢,我覺得這種類型的代碼應該繼承{get; set;}的內部,你應該隱式地訪問屬性類型的一個字段,無論你是直接使用還是掉落回到默認的自動屬性接線。

0

如果結構是駕駛你瘋了,這裏的某種解釋,評論

private static string _muiUrl; 
public static string MUIUrl 
{ 
    get 
    { 
     //if the variable is null or empty 
     if (String.IsNullOrEmpty(_muiUrl)) 
     { 
      //using defines a scope, outside of which an object or objects will be disposed. 
      //http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx 
      using (var db = new IntLMPDB()) 
      { 
       //this is linq 
       //a simple example will be 
       //http://stackoverflow.com/questions/214500/which-linq-syntax-do-you-prefer-fluent-or-query-expression 
       _muiUrl = (from c in db.Control 
          where c.ControlKey == "MUI_Url" 
          select c.ControlValue 
         ).FirstOrDefault(); 
       //or another linq syntax will be 
       //_muiUrl= db.Control 
       //  .Where(c => c.ControlKey == "MUI_Url") 
       //  .FirstOrDefault() 
       //  .ControlValue; 
      } 
     } 
     return _muiUrl; 
    } 
} 

特意給該屬性的訪問修飾符爲public,因爲它的你怎麼稱呼它之外的類(隨意把它變成私有如果是這樣的話)。

現在把它作爲,

ClassName.MUIUrl