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

本文关键字:属性 最佳 基类 派生 设置 | 更新日期: 2023-09-27 17:54:57

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

我也做了一些关于重构的阅读,乍一看,我应该使用提取超类。当我合并的都是属性时,这是个好主意吗?我的意思是,它们只是带有自动创建方法的字段如果我们在讨论组合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)我应该传递值/对象和设置基类属性在每个子类的构造函数?这里有一些代码重复

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

3)在像SetBaseProperties这样的基类上创建一个受保护的方法?把它们都作为参数?(这看起来很像#2,除了方法和函数)

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

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

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