gpt4 book ai didi

c# - 我怎样才能确保这个私有(private)只读数组实际上是私有(private)和只读的?

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:39 25 4
gpt4 key购买 nike

我想弄清楚如何才能成功更改“只读”数组。下面的代码运行成功,但我很困惑为什么私有(private)/只读数组的取消引用是合法的,如下所示:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Time[5] = 5; // Why is this legal? How can I make it illegal?
}
}

public class MyClass
{
private readonly uint[] time;
public IList<uint> Time
{
get { return time; }
}

public MyClass()
{
time = new uint[7];
}
}
}

正如我在上面提到的,我认为 Time[5] 是非法的,因为 public IList Time 没有 setter 。

我如何更改 MyClass 以确保执行 myClass.Time[5]合法的?

注意:我已经澄清了这个问题的意图,我一开始并不清楚意图是让这个非法。我想了解为什么它首先是合法的。

最佳答案

As I Note above, I would expect that Time[5] would be illegal due to the fact that public IList Time does not have a setter.

缺少 setter 意味着您不能将 NEW ARRAY 分配给属性的支持字段,但这并不意味着您不能更改支持字段指向的 CURRENT 数组引用。

Additionally, how can I create an array in the constructor which is read-only and unchangeable outside of this class?

您可以根据 MSDN 在声明阶段或类的构造函数中设置只读字段。 .

至于怎么解决,下面MSDN article讨论了这个确切的问题和一些补救方法。我不确定您的要求是什么,但我建议您考虑使用 ReadOnlyCollectionBase 实现自定义集合。然后传递它或者你可以使用 ReadOnlyCollection<T> . ReadOnlyCollectionBase 的链接提供了一个实现示例。

关于c# - 我怎样才能确保这个私有(private)只读数组实际上是私有(private)和只读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com