在 C# base class 中从 derived class 设置大量属性的最佳实践

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; }

从子classes 设置这些的最佳方法是什么?另外,我会将 private set 更改为 protected set

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

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

3) 在基础 class 上创建一个受保护的方法,例如 SetBaseProperties?将它们全部作为参数? (这看起来很像#2,除了方法与 ctor)

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

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

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

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

方法#3 本质上与您所说的相同,但是使用构造函数而不是方法可以保证设置这些属性。 (您很容易忘记调用该方法)。

使用属性和方法#2 是最好的选择。如果你的基class只是用来保存这些公共属性,并没有被使用,记得标记为abstract这样它就不能被实例化了。 (仅由派生的 classes 实现)

如果您有 ReSharper,您可以按 Alt-Insert, C 在您的派生 class 中创建派生构造函数。 (我相当确定 VS 默认没有这个功能)