解释我想要的东西有点难,但基本上,我想从集合类中设置ReadOnly属性。我知道这不是那么简单。
public class ListItemCollection : CollectionBase {
// other code
public void Add(ListItem item) {
item.Index = List.Count; // want to set Index
List.Add(item);
}
}
我不希望ListItemCollection中的其他类更改该属性的值。
public class Form1 : Form
{
private void Form_Load(....) {
ListItem item = new ListItem;
item.Index = 5; // I don't want people to set it.
}
}
我知道有可能因为ListViewItem
设法做到这一点。
答案 0 :(得分:3)
如果您将ListItem
放在与ListItemCollection
相同的程序集中,并且Index
属性为公共getter和内部setter,则可以执行此操作:
class ListItem {
// other code
public int Index {get; internal set;}
}
从技术上讲,它不会使属性readonly
,但就ListItem
类的其他用户而言,该属性似乎没有setter。
如果ListItem
必须位于其他程序集中,您可以让ListItemCollection
课程使用InternalsVisibleTo
attribute查看设置者。
答案 1 :(得分:1)
您应该set
使用internal
。这使得它可以从同一个程序集中的类访问,但不能从它外部访问。
public int Index { get; internal set; }