2010-05-12 25 views
8

Duplicar posible:
Int128 in .Net?C# Tipo de datos personalizado!

Después decidí poner en práctica mi Int128 en C#, pensé que sería bueno para que se vea como otros tipos de datos dotNet .. pero pude no aplicar la siguiente característica:

  • sufijo inicialización: como 13L y 0.2D

¿Puedo hacer mi propio sufijo en C#?
Y si no puedo ... ¿cómo puedo inicializarlo?
es decir

Int128 a= ?? 
+0

ver este post http://stackoverflow.com/questions/227731/int128-in-net –

Respuesta

8

No puede crear sus propios inicializadores de sufijos; esto es parte del lenguaje y está integrado en el compilador. Si escribe su propio compilador de C#, por otro lado, puede hacer lo que quiera y extenderlo de la manera que desee.

En cuanto a cómo lo inicializaría, depende de cómo lo haya escrito. Si se trata de una clase, deberá inicializarla con la palabra clave new, o escribir algunas conversiones implícitas en tipos numéricos que tengan menos precisión.

Como señaló Jon, no tendrá manera de establecerlo realmente en un valor mayor que ulong.MaxValue sin alguna manipulación de cadena. También deberá representar internamente de alguna forma (cadena? Un número de ulongs?) Y asegurarse de que todas las conversiones y operaciones funcionen correctamente (¿qué ocurre con los desbordamientos?).

17

No, no se puede crear su propia forma de literal en C#.

Usted podía tienen una conversión implícita de int, long, uint y ulong, lo que permite:

Int128 a = 100; 

pero no sería capaz de especificar valores mayores que ulong.MaxValue de esa manera.

Tener una conversión implícita de decimal permitiría un rango mayor, pero sería una mala idea porque perdería datos para cualquier valor que no fuera solo un número entero.

Básicamente no hay nada que permita un valor literal de valor total garantizado mayor que ulong.MaxValue - se podría analizar una cadena, pero eso no es realmente ideal. Alternativamente, podría crear un constructor que tomara dos ulongs, uno para los 64 bits inferiores y uno para los 64 bits superiores.

1

No, no puede hacer la inicialización del sufijo. Ese pedazo de ternura estará disponible en el próximo estándar de C++ ... pero estoy divagando.

Las opciones más obvias son Int128(long hi, ulong lo) y Int128(string).

Cuestiones relacionadas