如何在C#中声明可写的常量对象数组?

时间:2010-11-15 06:19:58

标签: c# arrays oop object const

我需要能够在数组中设置对象,但我不希望能够更改任何单个对象的状态。

3 个答案:

答案 0 :(得分:3)

你不能,我害怕。在C#中没有C ++中灵活的“const”等价物。

如果它是你自己的类型,你可以尝试使它不可变(如string)开始。这对变化非常有效:)

请注意,尽管您的问题要求可写数组,但实际上没有其他类型 - 您无法在最初填充时创建只读的数组...您必须使用其他方法(例如,创建一个{ {1}}包装另一个包装器已知的集合)。我知道这在你的特定情况下不是问题,但我只是想我会指出它。如果你使变量引用数组ReadOnlyCollection<T>,那只会阻止其他代码将变量的值设置为对另一个数组的引用 - 它不会阻止数组本身的变化。

答案 1 :(得分:0)

好吧,你可以声明一个私有变量,然后声明一个引用变量的属性,只定义了getter,这种类型使它只读。

示例:

private int[] myArray =new int[5];
public int[] MyArray
{
  get { return MyArray; }
}

答案 2 :(得分:0)

我会考虑使用某种形式的Immutable集合作为更好的设计理念。

选项包括使用yield [1]返回IEnumerable,IEnumerable,ReadOnlyCollection ...请参阅下面的链接以获得更好的解释。

[1]

public IEnumerable<string> Hosts 
      { 
            get     
             {     
                 foreach (var host in _hosts)
                 {    
                     yield return host;
                 }    
             }
     }

请参阅http://geekswithblogs.net/BlackRabbitCoder/archive/2010/11/04/c.net-fundamentals-returning-an-immutable-collection.aspx