簡體   English   中英

從派生類在C#基類中設置大量屬性的最佳實踐

[英]Best practice to set large amount of properties in C# base class from derived class

我正在努力重構一些遺留代碼,並擁有一大組共享相同屬性和字段的數據對象。

我也正在閱讀有關重構的一些內容,乍看起來我應該使用Extract Superclass。 當我所有的組合屬性時,這是一個好主意嗎? 我的意思是他們真的只是自動創建方法的字段,所以如果我們談論組合適合的GetXYZ功能......?

考慮到這一點,讓我們假設我的所有對象共享5個常見屬性:

public string Name { get; private set; }
public string Status {get; private set; }
public int IDNumber { get; private set; }
public int LocationID { get; private set; }
public Location LocationObj { get; private set; }

從子類中設置這些的最佳方法是什么? 此外,我將私有集更改為受保護集

1)我應該傳入values / object並在每個子類構造函數中設置基類屬性嗎? 這有一些代碼重復

2)傳入參數並讓派生類調用基類構造函數?

3)在基類上創建受保護的方法,如SetBaseProperties? 將所有這些作為參數? (除了方法vs ctor之外,這看起來很像#2)

還有其他我不知道的方法嗎?

方法#1不是一個好主意,因為它可以通過讓基類按照你的建議處理它來輕松簡化。

方法#2將減少您需要編寫的重復代碼的數量,並將所有邏輯留在基類中。

public SubItem(string name, string status, int id, int locID, Location loc) : base(name, status, id, locID, loc)

如你所說, 方法#3基本上是相同的想法,但使用構造函數而不是方法保證將設置這些屬性。 (您可能很容易忘記調用該方法)。

使用屬性和方法#2是最好的選擇。 如果您的基類僅用於保存這些公共屬性,並且未使用,請記住將其標記為abstract以便無法實例化。 (僅由派生類實現)

如果您有ReSharper ,則可以按Alt-Insert, C在派生類中創建派生構造函數。 (我相當確定VS默認沒有此功能)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM