2013-08-24 64 views
-3

之間的區別,我使用這兩個屬性什麼是以下屬性C#

1)

int x = 0; 

public int X 
{ 
    get 
    { 
     return x; 
    } 
    set 
    { 
     x = value; 
    } 
} 

2)

public string ID 
{ 
    get; 
    set; 
} 

什麼是這兩個屬性之間的區別。

+0

看看這個: - http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx –

回答

0

沒有。兩者都是相同的,只是你可以從第一個片段中做到這一點,第二個片段不能做到這一點。

int x = 0; 

public int X 
{ 
    get 
    { 
     return x; 
    } 
    set 
    { 
     if (value < 0) // A guard condition or some custom condition here 
      value = 0; 

     x = value; 
    } 
} 

爲了更明確的答案,你可以做

private double seconds; 

public double Hours 
{ 
    get { return seconds/3600; } 
    set { seconds = value * 3600; } 
} 
+0

然後簡單的變量和第二個片段之間有什麼區別。 –

+0

你在第一次做的事情是由編譯器自動完成的。但是,如果您想在設置和提取值時控制局部變量和屬性的值,則可以使用我在答案中編寫的代碼段。 –

2

在聲明屬性作爲顯示在下面的例子中, 編譯器創建一個私有的,匿名的支持字段,可以只有 通過該屬性的get和set訪問器訪問。

Auto-Implemented Properties (C# Programming Guide)

唯一的區別是一個事實,即在你的例子你還可以直接獲得的,而不是使用屬性/設置的支持字段。有了自動實現的屬性,你不能這樣做。

0

如果你已經轉而問道,

「是什麼這兩個代碼之間的區別片段(不只是兩個屬性之間)?」

你可能已經猜到了自己的答案:在第一個代碼段,你需要做一個額外的事情:你需要顯式聲明支持字段爲你的財產,x。在第二個代碼片段中,您不必這樣做,因爲編譯器會爲您做。因此

的兩個代碼段在功能上是相同的,不同之處在於在第一個代碼段,必須直接訪問屬性的支持字段(x)的方式。在第二個片段中,沒有辦法做到這一點,因爲後臺字段是匿名/匿名的。