【发布时间】:2011-05-10 01:49:14
【问题描述】:
我需要能够设置数组中的对象,但我不希望能够更改任何单个对象的状态。
【问题讨论】:
标签: c# arrays oop object constants
我需要能够设置数组中的对象,但我不希望能够更改任何单个对象的状态。
【问题讨论】:
标签: c# arrays oop object constants
我会考虑使用某种形式的不可变集合作为更好的设计概念。
选项包括返回为 IEnumerable、使用 yield[1] 的 IEnumerable、ReadOnlyCollection...请参阅下面的链接以获得更好的解释。
[1]
public IEnumerable<string> Hosts
{
get
{
foreach (var host in _hosts)
{
yield return host;
}
}
}
【讨论】:
好吧,你可以声明一个私有变量,然后声明一个引用该变量的属性,只定义了 getter,这使它成为只读的。
例子:
private int[] myArray =new int[5];
public int[] MyArray
{
get { return MyArray; }
}
【讨论】:
StringBuilder[] 类型的数组,但防止每个StringBuilder 的内容发生变化。
恐怕你不能。 C# 中没有与 C++ 中灵活的“const”等效的东西。
如果它是你自己的类型,你可以尝试让它不可变(如string)开始。这对改变非常有效:)
请注意,尽管您的问题要求一个可写数组,但实际上没有其他类型 - 您不能创建一个最初填充时只读的数组...您必须使用其他方法(例如创建一个 @ 987654322@ 包装另一个集合,仅为包装器所知)。我知道在您的特定情况下这不是问题,但我只是想指出这一点。如果您使变量引用数组readonly,那只会阻止其他代码将变量的值设置为对另一个数组的引用 - 它不会阻止数组本身的更改。
【讨论】: