从派生类

时间:2015-06-10 20:10:36

标签: c# inheritance polymorphism

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

我也正在做一些关于重构的阅读,乍一看它看起来我应该使用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?将所有这些作为参数? (这似乎很像#2除了方法与ctor之外)

我不知道的任何其他方法?

1 个答案:

答案 0 :(得分:9)

方法#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默认没有此功能)