2016-08-31 29 views
-2

我試圖優化我的代碼以獲得最大的可讀性,並且我需要我的代碼在內部直通。我將以兩個代碼片段爲例。在我眼中,下面的一個對眼睛更容易。這些片段(其中之一)將被存儲在一個類中,並且設置寬度應該只在類內部可能的同時獲得寬度應該始終可能。什麼是從類內部返回私有值的最佳方式?

答:

private int width; 
public int Width 
{ 
    get { return width; } 
    private set { } 
} 

B:

private int width; 
public int Width() 
{ 
    return width; 
} 

至於我而言實現相同的最終結果的這兩種方式是相同的。因爲我想在我的所有課程中徹底聯機,所以我不想將兩種方式混合在一起。 B方法在我眼中看起來更清潔。

這兩種方法都有什麼缺點/好處嗎?一種方法應該比另一種更受青睞嗎? A和B的方法真的完全相同嗎?

+4

'public int Width {get;私人設置; }' – zerkms

+0

Imo調用一個方法(可能需要執行某些功能)來獲取或設置一個值是沒有意義的,就像不會在獲得一個值時執行廣泛的功能一樣物業價值。我認爲你的** B **選項比較乾淨,但這可能僅僅取決於相關編碼器的選擇和風格。 –

+0

@zerkms你可以發表評論作爲答案? –

回答

1

一般來說,最好的做法是在做面向對象的編程時,應該使用方法來執行可能影響或可能影響對象狀態(除了單個屬性值之外)的操作,並且應該使用屬性setter和getters)來獲取或設置對象屬性。因此

方法名稱應該(一般來說)描述方法做什麼(語法應該像動詞),而屬性名應該是名詞(引用對象的一些屬性)

下表面,當然.Net編譯器將所有屬性獲取器和設置器轉換爲方法,(在IL代碼中不存在屬性這樣的東西),但上面闡述的主體可以讓你一眼就能看出表達式是「做」的東西,還是隻需訪問一個屬性。

1

不知道爲什麼一切都必須徹底排隊,或爲什麼這使得更多的可讀性。

這在任何情況下似乎都是最簡潔的實現。

public int Width 
{ 
    get; 
    private set; 
} 

如果您確實需要刪除空格,但我不確定這是否真的有所改進。

public int Width { get; private set; }

MSDN在這種情況下,提供了一些指導:

在大多數情況下,性能表現數據和方法進行操作。 屬性被訪問像字段,這使得它們更易於使用。甲 方法是一個很好的候選者,成爲一個屬性如果這些 條件之一是存在:

  • 採用任何參數和返回的對象的狀態信息。
  • 接受一個參數來設置對象狀態的某些部分。

屬性應該表現得好像它們是字段;如果方法不能, 它不應該更改爲屬性。在以下情況下,方法優於 屬性:

  • 該方法執行耗時的操作。該方法明顯慢於設置或獲得字段值所需的時間。
  • 該方法執行轉換。訪問字段不會返回它存儲的數據的轉換版本。
  • Get方法具有可觀察的副作用。檢索字段的值不會產生任何副作用。
  • 執行順序很重要。設置字段的值不依賴於其他操作的發生。
  • 連續調用該方法兩次創建不同的結果。
  • 該方法是靜態的,但返回一個可由調用者更改的對象。
  • 檢索字段的值不允許調用方更改該字段存儲的數據。
  • 該方法返回一個數組。
相關問題