2010-02-05 15 views
8

¿Por qué el constructor IPAddress toma Int64 en lugar de UInt32? Según Reflector, la dirección se almacena internamente como Int64 (m_Address) y el constructor la valida dentro del rango válido para UInt32. Así que estoy curioso por qué usa Int64 y no UInt32.¿Por qué el constructor de IPAddress toma Int64 en lugar de UInt32?

Y antes de que cualquiera diga IPv6 ... IPv6 es más grande que Int64 y se almacena como una matriz de UInt16. El constructor Int64 solo se usa para generar direcciones IPv4.

Respuesta

12

Probablemente porque en el estándar Common Language Specification (CLS) del Common Language Infrastructure (CLI), no es necesario que los tipos sin firmar sean compatibles con un idioma, por lo que utilizan el tipo más pequeño con signo que contendrá todos los valores posibles sin firmar.

La biblioteca de clases de .NET Framework incluye tipos que corresponden a los tipos de datos primitivos que utilizan los compiladores. De estos tipos, los siguientes son compatible con CLS: Byte, Int16, Int32, Int64, Single, Double, Boolean, Char, Decimal, IntPtr y String.

Cuestiones relacionadas