C#自定义数据类型!

时间:2010-05-12 14:22:16

标签: c# types constructor int128

  

可能重复:
  Int128 in .Net?

在我决定用C#实现我的Int128之后,我认为让它看起来像其他dotNet数据类型会很好..但是我无法实现以下功能:

  • 后缀初始化:如13L和0.2D

我可以在C#中创建自己的后缀吗? 如果我不能......我怎么能初始化呢? 即

Int128 a= ??

4 个答案:

答案 0 :(得分:17)

不,你不能在C#中创建自己的文字形式。

可以intlonguintulong进行隐式转换,允许:

Int128 a = 100;

但您无法指定大于ulong.MaxValue的值。

decimal进行隐式转换会允许更大的范围,但这是一个坏主意,因为您将丢失任何不仅仅是整数的值的数据。

基本上没有任何东西允许文字保证为整数值大于ulong.MaxValue - 你可以解析一个字符串,但这不是很理想。或者你可以创建一个构造函数,它接受两个 ulongs,一个用于底部64位,一个用于最高64位。

答案 1 :(得分:8)

您无法创建自己的后缀初始化程序 - 这是语言的一部分并融入编译器。另一方面,如果你编写自己的C#编译器,你可以做任何你想做的事情,并以你希望的方式扩展它。

至于如何初始化它 - 这取决于你如何编写它。如果它是一个类,则需要使用new关键字对其进行初始化,或者将一些隐式转换写入精度较低的数值类型。

正如Jon指出的那样,如果没有一些字符串操作,你将无法将其实际设置为大于ulong.MaxValue的值。您还必须以某种形式在内部表示(字符串?一些ulongs?)并确保所有转换和操作都正常工作(溢出怎么办?)。

答案 2 :(得分:1)

不,你不能做后缀初始化。即将推出的C ++标准将提供这种可爱性......但我离题了。

最明显的选择是Int128(long hi, ulong lo)Int128(string)

答案 3 :(得分:1)

您可以在4.0中查看新的BigInteger结构,以获取有关初始化的提示。 http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx