System.Numerics.BigInteger会不可变吗?应该是吗?

时间:2009-04-25 21:32:05

标签: .net immutability biginteger

.net框架4显然将包含一个BigInteger类。但是,我似乎无法弄清楚它是否会一成不变。我似乎也无法决定这是否是一件好事。

不变性有很多好处,特别是对于像“大型”这样“像价值一样”的东西。另一方面,基本操作必须是高效的,以便尽可能快地使像PowerMod这样的高成本操作。原地添加比不可变添加更快。我目前倾向于将不可变性作为库类的更好选择(想想String)。

有谁知道它是否会不可变?你认为它应该是不可改变的吗?

4 个答案:

答案 0 :(得分:7)

我相信它将是不可变的(我认为它们基本上将DLR实现,这是不可变的,进入核心)。

是的,它应该是不可变的。它的行为应该像其他数值类型,如Int32和Double。拥有一个可变的数字类会非常混乱。

答案 1 :(得分:4)

我认为这是不可改变的,我认为这是“价值”类型唯一合理的设计选择。 (就像DLR一样,F#BigInt也是不可变的。我们终于在框架中获得这种类型以跨语言共享,这很棒。)

答案 2 :(得分:1)

这将是不可改变的。是的,它应该是 - 否则,它将不会像其他数字类型一样,如果您从基于整数的代码移动到基于biginteger的代码,您将看到一些非常奇怪的行为。

可能在将来的某个版本中应该有一个额外的可变类型(比如StringBuilder用于String)

答案 3 :(得分:1)

在msdn.microsoft.com/en-us/library/system.numerics.biginteger(VS.100).aspx

上查看(初步但正式的)文档
  

BigInteger类型是一个不可变类型,表示一个任意大的整数,其理论上的值没有上限或下限。 [...]因为BigInteger类型是不可变的[...]并且因为它没有上限或下限,所以可以为导致BigInteger值增大的任何操作抛出OutOfMemoryException。