有没有List<T> 属性 with get,不允许直接向其中添加项目?

Is possible to have List<T> property with get, which does not allow to add items to it directly?

我关注class

public class Workflow
{
    public List<IActivity> Activities { get; } = new List<IActivity>();
    public void Add(IActivity activity)
    {
        Activities.Add(activity);
    }
}

现在,想法是只能使用 Add 方法添加活动。但我还需要能够读取它们,这样我才能执行它们。

现在看程序:

class Program
{
    static void Main(string[] args)
    {
        var workflow = new Workflow();

        //I want this to work and it works
        workflow.Add(new UploadVideoActivity());

        //I want this to not work, but it works.
        workflow.Activities.Add(new UploadVideoActivity());
        WorkflowEngine.Run(workflow);
    }
}

我能否创建 List<T> 属性,它允许我们仅使用方法向其中添加项目,但可以从 class 中读取?

您可以在内部使用 List<IActivity> 但将其公开为 IReadOnlyList<IActivity> 属性 因此无法从您的外部修改 class:

public class Workflow
{
    private readonly List<IActivity> activities = new();
    public IReadOnlyList<IActivity> Activities => activities;
    public void Add(IActivity activity)
    {
        activities.Add(activity);
    }
}