从派生类在C#基类中设置大量属性的最佳实践

Jos*_*h R 4 c# polymorphism inheritance

我正在努力重构一些遗留代码,并拥有一大组共享相同属性和字段的数据对象.

我也正在阅读有关重构的一些内容,乍看起来我应该使用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; }
Run Code Online (Sandbox Code Playgroud)

从子类中设置这些的最佳方法是什么?我还将私有集更改为受保护集.

1)我应该传入values/object并在每个子类构造函数中设置基类属性吗?这有一些代码重复

2)传入参数并让派生类调用基类构造函数?

3)在基类上创建受保护的方法,如SetBaseProperties?将所有这些作为参数?(除了方法vs ctor之外,这看起来很像#2)

还有其他我不知道的方法吗?

Cyr*_*ral 9

方法#1不是一个好主意,因为它可以通过让基类按照你的建议处理它来轻松简化.

方法#2将减少您需要编写的重复代码的数量,并将所有逻辑留在基类中.

public SubItem(string name, string status, int id, int locID, Location loc) : base(name, status, id, locID, loc)
Run Code Online (Sandbox Code Playgroud)

如你所说,方法#3基本上是相同的想法,但使用构造函数而不是方法保证将设置这些属性.(您可能很容易忘记调用该方法).

使用属性和方法#2是最好的选择.如果您的基类仅用于保存这些公共属性,并且未使用,请记住将其标记为abstract无法实例化.(仅由派生类实现)

如果您有ReSharper,则可以按下Alt-Insert, C以在派生类中创建派生构造函数.(我相当确定VS默认没有此功能)