我刚刚从Java切换到C#,并刚刚熟悉Property的概念,这似乎是获取和设置字段值的常用方法。创建方法来改变C#中的私有字段的正确方法是什么?
那么我应该怎么做,如果我需要更新字段值,但不设置它们全新的值?就像我的课上有一个字段是一个List,我需要将元素添加到List中,同时保持List的其余部分不变。如果我只是继续前进,创造像
void append(Point p) { }
或者是有在C#这样做的更优雅或文明的方式方法?
我刚刚从Java切换到C#,并刚刚熟悉Property的概念,这似乎是获取和设置字段值的常用方法。创建方法来改变C#中的私有字段的正确方法是什么?
那么我应该怎么做,如果我需要更新字段值,但不设置它们全新的值?就像我的课上有一个字段是一个List,我需要将元素添加到List中,同时保持List的其余部分不变。如果我只是继续前进,创造像
void append(Point p) { }
或者是有在C#这样做的更优雅或文明的方式方法?
如果你想允许修改列表中,但不允许实例被改变,你可以写 public IList<Point> MyPointList {get; private set;}
不过,如果你想只支持添加元素,那么add方法将是一个好办法走。
你似乎是罗尼科尔曼的粉丝。 :) –
大声笑,我实际上没有把这一起,当我想出了名字。这只是我说的。 :D –
没有一种通过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#语法简单而优雅,写起来很愉快。在一个类中,你可以创建一个支持公共getter和setter的私有字段。从这个班级内,你可以设置或获得私人领域,只要你喜欢。如果一个不同的类需要访问该字段,则需要使用公共的getter和setter。示例:可以从类中创建和编辑私人列表,但您可以选择。使用自定义添加方法或使用List .Add方法。从另一个类中,您只需调用公共List属性的.Add方法。真的只有一个正在编辑的私人列表。您可以为其他任务创建另一个私人列表。在进入主列表之前,可能有一个等待验证项目的临时区域。
[试试这个](https://en.wikipedia.org/wiki/Enter_key) – TaW
你可以公开列表作为属性列表 Points {get;组; }'并调用Add/Remove就可以了。 –
如何将项目添加到列表中,同时保持列表的其余部分不变?这与将项目添加到列表中有何不同? – Enigmativity