Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ReadOnlyCollection必须是不可变的吗_C#_Architecture_Immutability_Readonly - Fatal编程技术网

C# ReadOnlyCollection必须是不可变的吗

C# ReadOnlyCollection必须是不可变的吗,c#,architecture,immutability,readonly,C#,Architecture,Immutability,Readonly,我正在设计一些使用ReadOnlyCollection的接口,以指示这些接口的使用者只能从集合中读取 然而,提供的集合不是一成不变的,并且会不时地改变,我想知道我是否有一个错误的设计。ReadOnlyCollection的子级也应该是不可变的吗?ReadOnlyCollection类的目的不是提供不可变的集合,而是提供围绕可变列表的只读包装。不过,基础列表始终是可变的,对列表的更改将公开给只读集合 如果您需要在设计中公开一个真正不可变的集合,则应该考虑使用新的,并公开适当的不可变集合。< P>

我正在设计一些使用ReadOnlyCollection的接口,以指示这些接口的使用者只能从集合中读取

然而,提供的集合不是一成不变的,并且会不时地改变,我想知道我是否有一个错误的设计。ReadOnlyCollection的子级也应该是不可变的吗?

ReadOnlyCollection类的目的不是提供不可变的集合,而是提供围绕可变列表的只读包装。不过,基础列表始终是可变的,对列表的更改将公开给只读集合

如果您需要在设计中公开一个真正不可变的集合,则应该考虑使用新的,并公开适当的不可变集合。

< P> > RealDyLyDeCype类不打算提供不可变的集合,而是围绕可变列表的只读包装器。不过,基础列表始终是可变的,对列表的更改将公开给只读集合


如果你需要在你的设计中公开一个真正不可变的集合,你应该考虑使用新的,并公开适当的不可变集合。

@谢谢,但是我知道这两者之间的区别,这就是我为什么要问这个问题的原因。有人告诉我,我的ReadOnlyCollection应该是不可变的,我认为没有任何理由这样做,因此我只想在重构我的库之前进行双重检查:@SLaks谢谢,但我很清楚两者之间的区别,我问这个问题的原因。有人告诉我,我的ReadOnlyCollection应该是不可变的,我认为没有任何理由这样做,因此我只想在重构我的库之前仔细检查一下:。谢谢!这些新集合看起来很有趣,也很有用,但是我不需要不变性,我实际上依赖于可变性;依我看,大多数IReadOnlyXX都应该是IReadableXX。如果我负责命名,我会建议IReadOnlyXX合同的一部分应该是,交换引用应该是安全的,而不必首先将它们包装在ReadOnlyCollection或类似的包装中。我还将定义一个IImmutableXX接口,其契约应该是持久化引用等同于持久化内容;我希望它是一个接口,允许像这样的东西……一个FunctionToList类,它的构造函数接受一个Func和一个int作为大小,所以一个新的FunctionToList int n=>1.0/1+n,1000000的行为就像一个列表,它总是包含第一个百万值{1,1/2,1/3,1/4,{1/1000000},但实际上不需要存储任何一个。谢谢!这些新集合看起来很有趣,也很有用,但是我不需要不变性,我实际上依赖于可变性;依我看,大多数IReadOnlyXX都应该是IReadableXX。如果我负责命名,我会建议IReadOnlyXX合同的一部分应该是,交换引用应该是安全的,而不必首先将它们包装在ReadOnlyCollection或类似的包装中。我还将定义一个IImmutableXX接口,其契约应该是持久化引用等同于持久化内容;我希望它是一个接口,允许像这样的东西……一个FunctionToList类,它的构造函数接受一个Func和一个int作为大小,所以一个新的FunctionToList int n=>1.0/1+n,1000000的行为就像一个列表,它总是包含第一个百万值{1,1/2,1/3,1/4,{1/1000000},但实际上不需要存储任何一个。