在 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 方法。实际上只有一个正在编辑的私人列表。您可以为另一个任务创建另一个私有列表。可能是在进入主列表之前等待验证的项目的暂存区。
我刚从 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 方法。实际上只有一个正在编辑的私人列表。您可以为另一个任务创建另一个私有列表。可能是在进入主列表之前等待验证的项目的暂存区。