派生 class 和派生字段。更改一些或所有属性值

Derived class and Derived field. Change a few or all properties values

我使用 C# 10 和 Net 6(简化代码):

public class DefaultsBase {
  public Int32 Repeats { get; set; } = 10;
}

public abstract class StrategyBase {

  public abstract String Name { get; }
  public abstract DefaultsBase Defaults { get; }

}

public class MonthlyStrategy : StrategyBase {

  public override String Name => "Monthly Strategy";
  public override MonthlyStrategyDefaults Defaults = new MonthlyStrategyDefaults();

  public String Street { get; }

  private class MonthlyStrategyDefaults : DefaultsBase {
    public Int32 Window { get; } = 20;
  };

  public MonthlyStrategy(String street, Action<MonthlyStrategyDefaults> defaultsConfiguration)  {

    defaultsConfiguration(Defaults);
    Street = street;

  }

}

我想要完成的是:

1 - 创建从 StrategyBase 派生的策略 类;

2 - 在每个 Strategy 中能够创建从 DefaulstBase 派生的 StrategyDefaults。

3 - 在构造函数中使用一个动作来更改一些或所有策略的默认值,包括 DefaultsBase 上的默认值。

我不确定我的实施是否有意义,而且我也遇到了错误:

public override MonthlyStrategyDefaults Defaults 
> The modifier 'override' is not valid for this item 

public MonthlyStrategy(String street, Action<MonthlyStrategyDefaults> defaultsConfiguration)
> Inconsistent accessibility: 
  parameter type 'Action<MonthlyStrategy.MonthlyStrategyDefaults>' is 
  less accessible than method 'MonthlyStrategy.MonthlyStrategy(string, Action<MonthlyStrategy.MonthlyStrategyDefaults>)

如何操作?

第一个错误

要覆盖基 class 中的 属性,它应该具有相同的 类型 和名称

public override MonthlyStrategyDefaults Defaults = new MonthlyStrategyDefaults();

改为

public override DefaultsBase Defaults = new MonthlyStrategyDefaults();

第二个错误

在 public 方法中 MonthlyStrategy 你尝试给它一个私有 class 作为参数 Action<MonthlyStrategyDefaults> ...调用者对象将如何实例化或处理私人class! ... 你有三个解决方案

  1. 更改 MonthlyStrategyDefaults 的可访问性并使其成为 public
  2. 或者您可以基于 class、Action<DefaultsBase> 而不是 Action<MonthlyStrategyDefaults>
  3. 进行配置
  4. 或在内部进行所有配置