gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:24:01 25 4
gpt4 key购买 nike

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

我也在阅读一些关于重构的资料,乍一看我似乎应该使用 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; }

从子类中设置这些的最佳方法是什么?另外,我会将私有(private)集更改为保护集

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

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

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

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

最佳答案

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

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

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

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

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

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

关于c# - 从派生类在 C# 基类中设置大量属性的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com