C#自定义数据类型!

C#自定义数据类型!,c#,types,constructor,int128,C#,Types,Constructor,Int128,可能重复: 在我决定在C#中实现我的Int128之后,我想最好让它看起来像其他的dotNet数据类型。。但我无法实现以下功能: 后缀初始化:如13L和0.2D 我可以用C#做自己的后缀吗? 如果我不能。。如何初始化它? i、 e 不,您不能在C#中创建自己的文字形式 您可以从int、long、uint和ulong进行隐式转换,允许: Int128 a = 100; 但是您无法通过这种方式指定大于ulong.MaxValue的值 从decimal进行隐式转换将允许更大的范围,但这不是一个好

可能重复:

在我决定在C#中实现我的Int128之后,我想最好让它看起来像其他的dotNet数据类型。。但我无法实现以下功能:

  • 后缀初始化:如13L和0.2D
我可以用C#做自己的后缀吗?
如果我不能。。如何初始化它?
i、 e


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

您可以从
int
long
uint
ulong
进行隐式转换,允许:

Int128 a = 100;
但是您无法通过这种方式指定大于
ulong.MaxValue
的值

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


基本上,没有任何东西可以保证文本的整数值大于
ulong.MaxValue
——您可以解析字符串,但这并不理想。或者,您可以创建一个包含两个ulong的构造函数,一个用于底部64位,另一个用于顶部64位。

您不能创建自己的后缀初始值设定项-这是语言的一部分,并烘焙到编译器中。另一方面,如果你编写自己的C#编译器,你可以做任何你想做的事情,并以任何你想做的方式扩展它

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


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

不,不能进行后缀初始化。这一点的可爱将在即将到来的C++标准中获得。但我离题了


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

您可以查看4.0中新的BigInteger结构以获取初始化提示

看到这个帖子了吗
Int128 a = 100;