从集合类中设置ReadOnly属性

时间:2014-05-30 14:59:35

标签: c#

解释我想要的东西有点难,但基本上,我想从集合类中设置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设法做到这一点。

2 个答案:

答案 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; }