System.Numerics是一个单独的程序集的原因

时间:2014-02-18 17:14:30

标签: c# .net types .net-assembly numeric

System.Numerics程序集只包含两种类型(结构)BigIntegerComplexbuilt in Numerical types的其余部分包括(int,long,double ...) System.dll集会。

为什么会这样分离?我可以在两个Assemblies中声明两种类型的声明,例如:

加倍:

public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>

Complexe:

public struct Complex : IEquatable<Complex>, IFormattable

Complex类型中实现的接口都在Double中使用,并且通常都来自System程序集,因此基本上实现的接口不会是这种分离的原因。

我仍然想知道这种分离背后的目的是什么,它们都是数字类型,它们都是内置的,它们都以相同的方式从同一个程序集实现相同的接口,为什么这样的分离呢,为什么不会BigInteger和复杂类型与所有其他内置数值类型一起位于系统程序集中?

这种分离还伴随着这样一个事实,即书籍和教程中很少提及System.Numerics类型,这使得像我这样的年轻初学者很长时间忽略了这些类型的存在。

编辑:我不是说通过这个问题来谈谈我的观点,我只是不明白这个案例,我要求这个问题对平台有更多的了解。

2 个答案:

答案 0 :(得分:4)

它们比其他类型更晚地添加到框架中。

所以在某些时候,微软的一些团队正在创建这两种类型,他们必须做出决定:我们是否将它们添加到现有的DLL中,例如mscorlib.dll或System.dll,或者我们将它们放入新的DLL中。

我确信他们考虑了所有专业人士和骗子。

以下是一些支持决定将它们放入单独的程序集的可能论据:

  • 他们很少需要。为什么使用很少需要的类型增加现有程序集的大小?
  • 其他人可能已实施名为BigIntegerComplex的已实施类型。通过不将我们的实现添加到现有程序集中,我们不太可能为它们创建问题(即打破它们的构建)。
  • 通过将它们放入单独的程序集中,我们可以有一个单独的发布周期。我们不必等待.NET Framework的下一个版本发布此程序集。

我知道所有这些论点都有反驳,但他们确实决定创建一个单独的集合。至于实际原因,你不得不询问有问题的团队。话虽如此,许多团队每次想要添加类型时都会问自己同样的问题。以上几点通常列在所考虑的论据列表中。

答案 1 :(得分:1)

除了在基类库之后引入很多内容之外,它们还代表CPU不运行的数据类型。在BCL中找到的运算符可以直接在CPU上执行,例如加法,减法等。一个值得注意的例外是decimal类型,BCL对此有特殊考虑。

我认为第二大原因是将这些类型分开会阻碍它们在所有平台上的使用。在决定在手机或平板电脑上使用BigInteger之前,您需要特别注意{{1}}。