2012-02-05 61 views
0

可能重複:
Difference between Property and Field in C#代碼比較 - 哪個更好或不需要?

public class Test 
{ 
    public bool testData1; 
    public string testData2; 
} 

public class Test 
{ 
    public bool TestData1 { get; set; } 
    public string TestData2 { get; set; } 
} 

public class Test 
{ 
    private bool testData1; 
    private string testData2; 

    public bool TestData1 { get { return testData1; } set { testData1 = value; } } 
    public string TestData2 { get { return testData2; } set { testData2 = value; } } 
} 

哪些優化代碼更好或不必要?爲什麼?

是不是最後一個擁有很多不必要的數據?

=======編輯:

我認爲在這種情況下:

public class Test 
{ 
    public Test(bool testData1) 
    { 
     this.testData1 = testData1; 
    } 
    private bool testData1; 

    public bool TestData1 { get { return testData1; } } 
    public string TestData2 { get; set; } 
} 

在後臺有場是必需的。不是嗎?

回答

8

你不應該有公共領域,而是使用屬性,所以你可以稍後改變內部實現,如果需要的話 - 所以2)獲勝。 3)就是如何在引擎蓋下實現auto properties,所以相當於2)

+0

還有一點:(2)是更簡潔 - 和,從而,典型地優選的 - 超過(3)。例外存在,主要的一點是,當你想爲初始值分配給支持字段,你不能這樣做,雖然(2)。 – Douglas 2012-02-05 20:13:30

+0

@Douglas不只是初始值,但也有一些邏輯,也就是說,只有在某些條件下才會有一個值。 – 2012-02-05 20:15:15

+0

公共字段在常量時可以使用,例如['Math.PI'](http://msdn.microsoft.com/zh-cn/library/system.math.pi.aspx)。 – 2012-02-05 20:15:26

2

第二和第三個是一樣的。首先是壞的,因爲如果你改變了某些東西(名稱,類型),那麼你破壞了類接口。

5

第二個兩個是等價的。說同樣的事情只是不同的語法。

第一個不同 - 它暴露字段,而不是屬性。字段和屬性之間的區別已經被網絡上的惡作劇所覆蓋。

2

第一個示例在語義上與另外兩個不同。

在第一個示例中,您使用的是字段而不是屬性。

第二個例子相當於第三個;編譯器將自己生成後備字段。所以,第二個例子更容易閱讀,而且更加清晰。

關於您編輯的問題: 不必要的。你可以這樣做:

public class MyClass 
{ 

    MyClass(bool x) 
    { 
     TestData1 = x; 
    } 

    public bool TestData1 
    { 
     get; 
     private set; 
    } 
} 
2

在生產代碼中使用第一個代碼應該是沒有問題的,因爲公有字段是封裝使用不當的明確標誌。

的數字二和三是相似的,但有一個重要的區別:如果你計劃你的序列化類,你應該更喜歡#3,因爲你有過,你可以序列變量嚴格的控制。除此之外,#2和#3是相同的。我總是以#2開始,只有在必要時纔去#3。

+0

這通常是很好的建議:以自動屬性開始並重構爲稍後使用支持字段*如有必要*。 – BrokenGlass 2012-02-05 20:27:39