我有一个抽象类,它带有一个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方法时实现你的需求 –