如何将字段传递给 "has a" 关系中的子对象列表

How to pass the field to list of child objects in "has a" relationship

我有一个classStep

public class TrainingStep
{
    private List<Part> parts;
    public Part currentPart;
   
    public void AddPart(Part part)
    {
       parts.Add(part);
    }

    ///a lot of public methods which are called from one layer above Step( a class containing Step list)
}

在此代码中,PartStep 一无所知。

currentPart经常变化 我希望 parts 所有人都知道哪个是当前

为了实现这一点,我考虑添加 step 作为 Part class 构造函数的参数,以便每个部分都知道它属于哪个 Step。 像这样

public Part(Step step, ...)
{
  this.step = step;
}

但是这种解决方案的问题是我可以使用我传递的引用从 Part 访问 Step class 中的每个 public 方法通过构造函数。

但我只想访问 Part 中的 currentPart 字段。 我怎样才能做到这一点?

您可以定义一个 Func<Part>,其中 returns 您的 currentPart 并将此委托传递给您的部分。

public class TrainingStep
{
    private List<Part> parts;
    public Part currentPart;
    private Func<Part> getCurrentPartFunc = () => currentPart;
   
    public void AddPart(Part part)
    {
       part.GetCurrentpart = getCurrentPartFunc;
       parts.Add(part);
    }
}

class Part
{
    public Func<Part> GetCurrentPart {get; set;}
}