我剛剛從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