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)
还有其他我不知道的方法吗?
方法#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默认没有此功能)
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |