从集合类设置只读属性
本文关键字:只读属性 设置 集合类 | 更新日期: 2023-09-27 18:06:01
解释我想要什么有点困难,但基本上,我想从集合类设置一个ReadOnly属性。我知道事情没那么简单。
public class ListItemCollection : CollectionBase {
// other code
public void Add(ListItem item) {
item.Index = List.Count; // want to set Index
List.Add(item);
}
}
我不希望listtitemcollection中的其他类改变该属性的值。
public class Form1 : Form
{
private void Form_Load(....) {
ListItem item = new ListItem;
item.Index = 5; // I don't want people to set it.
}
}
我知道这是可能的,因为ListViewItem
设法做到了。
如果您将ListItem
放置在与ListItemCollection
相同的程序集中,并为Index
属性提供公共getter和内部setter,则可以这样做:
class ListItem {
// other code
public int Index {get; internal set;}
}
从技术上讲,它不会使属性成为readonly
,但就ListItem
类的其他用户而言,该属性似乎没有setter。
如果ListItem
必须在不同的程序集中,您可以通过使用InternalsVisibleTo
属性让ListItemCollection
类看到setter。
您应该使用internal
来代替set
。这使得它可以从同一程序集中的类访问,但不能从程序集中的外部访问。
public int Index { get; internal set; }