System.numerics.biginteger가 불변 할 수 있습니까? 해야합니까?
-
16-09-2019 - |
문제
.NET Framework 4에는 분명히 BigInteger 클래스가 포함됩니다. 그러나, 나는 그것이 불변할지 여부를 알 수없는 것 같습니다. 나는 또한 그것이 좋은지 여부를 결정할 수없는 것 같습니다.
불변성은 특히 큰 정보와 같은 "가치와 같은"것에 대해 많은 이점을 가지고 있습니다. 반면에 PowerMod와 같은 고비용 작업을 가능한 한 빠른 속도로 만들려면 기본 작업이 효율적이어야합니다. 안락은 불변의 추가보다 빠를 것입니다. 나는 현재 도서관 클래스 (Think String)의 더 나은 선택으로 불변성에 기대고 있습니다.
그것이 불변이 될지 아는 사람이 있습니까? 당신은 그것이 불변이어야한다고 생각합니까?
해결책
나는 그것이 불변이 될 것이라고 믿는다 (나는 기본적으로 DLR 구현을 불변으로 가져오고있다).
예, 불변이어야합니다. Int32 및 Double과 같은 다른 숫자 값 유형과 같이 행동해야합니다. 돌연변이 가능한 숫자 클래스를 갖는 것은 매우 혼란 스러울 것입니다.
다른 팁
나는 그것이 불변이 될 것이라고 생각하며, 이것이 '가치'유형에 대한 유일한 합리적인 디자인 선택이라고 생각합니다. (DLR과 마찬가지로 F# bigint도 불변입니다. 우리가 프레임 워크에서 언어를 공유 할 수 있도록 마침내이 유형을 얻는 것이 좋습니다.)
불변이 될 것입니다. 그렇습니다. 그렇지 않으면 다른 숫자 유형처럼 행동하지 않으며 정수 기반 코드에서 BigInteger 기반 코드로 이동하면 매우 이상한 동작이 표시됩니다.
아마도 향후 릴리스에는 추가로 변한 유형이 있어야합니다 (StringBuilder는 String 용입니다).
msdn.microsoft.com/en-us/library/system.numerics.biginteger(vs.100).aspx의 (예비 그러나 공식) 문서를 살펴보십시오.
Biginteger 유형은 이론의 값이 상한 또는 하한이없는 임의로 큰 정수를 나타내는 불변의 유형입니다. [...] biginteger 유형은 불변이기 때문에 [...] 상한 또는 하한이 없기 때문에 Biginteger 값이 너무 커지는 모든 작업에 대해 외부에서 외부 예상을 던질 수 있습니다.