有没有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);
}
}
我关注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);
}
}