我有一個抽象類,它帶有一個int List字段和我想要控制的屬性,因爲它總是需要排序。停止使用抽象類的List類中的Add和Remove方法
public abstract partial class FindAndReplace : Form {
private readonly List<int> _columnsToSearch = new List<int>();
public List<int> ColumnsToSearch { get { return _columnsToSearch; } }
public void AddToColumnsToSearch(int intToAdd) {
_columnsToSearch.Add(intToAdd);
_columnsToSearch.Sort();
}
protected abstract void ColumnCheckBox_CheckChanged(object sender, EventArgs e);
...
}
這是FindAndReplace的子類。我想強制它使用FindAndReplace的方法AddToColumnsToSearch,但在子類中,ColumnsToSearch上的Add方法仍然可用。我的印象是,使_columnsToSearch只讀,只給ColumnsToSearch上的get方法會隱藏任何方法,如ColumnsToSearch上的添加和刪除。
public partial class StepsTableFindAndReplace : FindAndReplace {
protected override void ColumnCheckBox_CheckChanged(object sender, EventArgs e) {
CheckBox cb = sender as CheckBox;
//get the columnIndex (removed the actual "get" code to keep simpler)
int colIndex = 0;
//can still use Add and Remove, want it to be
//AddToColumnsToSearch(colIndex) and RemoveFromColumnsToSearch(colIndex)
if (cb.Checked) ColumnsToSearch.Add(colIndex);
else ColumnsToSearch.Remove(colIndex);
}
...
}
有什麼我做錯了/不理解?
對於這個問題的答案給了我這個解決方案(即不工作)... C# get and set properties for a List Collection
你可以建立你自己的實現IList <>的類,並在調用Add方法時實現你的需求 –