在 C# 中创建更改私有字段的方法的正确方法是什么?

What is the correct way to create methods that change private fields in C#?

我刚从 Java 切换到 C#,并且刚刚熟悉 属性 的概念,这似乎是获取和设置字段值的常用方法。

那么,如果我需要经常更新字段值,而不是将它们设置为全新的值,我该怎么办?例如,我的 class 中有一个字段是一个列表,有时我需要将元素附加到其中,同时保持列表的其余部分不变。我应该继续创建一个像

这样的方法吗?
void append(Point p) { }

或者在 C# 中是否有更优雅或更文明的方法?

如果你想允许修改列表但不允许更改实例,你可以写 public IList<Point> MyPointList {get; private set;}

但是,如果您只想支持添加元素,那么 add 方法将是一个不错的选择。

没有单一的 "correct" 方法可以通过 API 设置私有字段。答案取决于您希望向用户展示的功能。

如果您想让他们访问您的 List<Point> 作为只读集合,他们可以按照他们喜欢的任何方式修改,您可以将您的列表作为只读 属性 :

public IList<Point> Points {get;} = new List<Point>();

如果您认为这种方法给了您的用户太多的自由,并且您希望对列表中出现的点进行更严格的控制,您可能想要公开一个 属性 来访问列表作为 IEnumerable<Point> 和一系列用于添加/删除/修改列表上的点的方法。

private IList<Point> points = new List<Point>();
public IEnumerable<Point> Points => points;
public void AddPoint(Point p) {
    // validate p before inserting on the list,
    ...
    points.Add(p);
}

注意:上面的代码示例使用 C#6 语法。

C#语法简单优雅,写起来很愉快。在 Class 中,您可以创建一个私有字段来备份 public getter 和 setter。在此 Class 中,您可以根据需要设置或获取私有字段。如果不同的 Class 需要访问该字段,则需要使用 public getter 和 setter。示例:您可以选择在 class 中创建和编辑私人列表。使用自定义添加方法或使用 List.Add 方法。在不同的 class 中,您只需调用 public 列表属性的 .Add 方法。实际上只有一个正在编辑的私人列表。您可以为另一个任务创建另一个私有列表。可能是在进入主列表之前等待验证的项目的暂存区。