1. Clases Predefinidas Por .Net
C# ofrece un conjunto de tipos predefinidos, la mayoría de los cuales resultarán familiares a
los programadores de C y C++.
Los tipos de referencia predefinidos son object y string. El tipo object es el tipo base
definitivo de todos los demás tipos. El tipo string permite representar valores de cadena
Unicode. Los valores del tipo string son inmutables.
Los tipos de valor predefinidos incluyen tipos integrales con y sin signo, tipos con punto
flotante y los tipos bool, char y decimal. Los tipos integrales con signo son sbyte, short,
int y long; los tipos integrales sin signo son byte, ushort, uint y ulong; y los tipos de
punto flotante son float y double.
El tipo bool permite representar valores booleanos, que son true o false (verdadero o falso).
La inclusión de bool facilita la programación de código autoexplicativo, y ayuda a eliminar
el excesivamente frecuente error de codificación de C++ en el que un programador usa por
error "=", cuando debería utilizar "==". En C#, el ejemplo
int i = ...;
F(i);
if (i = 0) // Bug: the test should be (i == 0)
G();
produce un error en tiempo de compilación porque la expresión i = 0 es de tipo int, y las
instrucciones if requieren una expresión de tipo bool.
El tipo char permite representar caracteres Unicode. Una variable de tipo char representa
un carácter Unicode único de 16 bits.
El tipo decimal es adecuado para aquellos cálculos en los que los errores de redondeo
causados por las representaciones de punto flotante son inaceptables. Son ejemplos
corrientes los cálculos financieros, por ejemplo, cálculos de impuestos y conversiones de
divisas. El tipo decimal proporciona 28 dígitos significativos.
En la tabla inferior se enumeran los tipos predefinidos, y se muestra cómo pueden
escribirse valores literales para cada uno.
Tipo Descripción Ejemplo
object Tipo base definitivo de todos los demás tipos object o = null;
string Tipo de cadena; una cadena es una secuencia de
caracteres Unicode
string s = "hello";
sbyte Tipo integral de 8 bits con signo sbyte val = 12;
short Tipo integral de 16 bits con signo short val = 12;
int Tipo integral de 32 bits con signo
2. int val = 12;
long Tipo integral de 64 bits con signo long val1 = 12;
long val2 = 34L;
byte Tipo integral de 8 bits sin signo byte val1 = 12;
ushort Tipo integral de 16 bits sin signo ushort val1 = 12;
uint Tipo integral de 32 bits sin signo uint val1 = 12;
uint val2 = 34U;
ulong Tipo integral de 64 bits sin signo ulong val1 = 12;
ulong val2 = 34U;
ulong val3 = 56L;
ulong val4 = 78UL;
float Tipo de punto flotante de precisión simple float val = 1.23F;
double Tipo de punto flotante de precisión doble double val1 = 1.23;
double val2 = 4.56D;
bool Tipo Boolean; un valor bool puede ser true o
false
bool val1 = true;
bool val2 = false;
char Tipo de carácter; un valor char es un carácter
Unicode
char val = 'h';
decimal Tipo decimal preciso con 28 dígitos significativos decimal val = 1.23M;
Los tipos predefinidos proporcionan un método sencillo para un tipo suministrado por el
sistema. Por ejemplo, la palabra clave int hace referencia al struct System.Int32. Por
motivos de estilo, se prefiere el uso de la palabra clave al uso del nombre completo del tipo
de sistema.
Los tipos de valor predefinidos como int reciben un tratamiento especial en algunos
aspectos, pero en general su tratamiento es exactamente el mismo que el de otras
estructuras. La sobrecarga de operadores permite a los desarrolladores definir tipos struct
nuevos con un comportamiento prácticamente idéntico al de los tipos de valor predefinidos.
Por ejemplo, un struct Digit acepta las mismas operaciones matemáticas que los tipos
integrales predefinidos, y puede definir conversiones entre los tipos Digit y los
predefinidos.
Los mismos tipos predefinidos emplean la sobrecarga de operadores. Por ejemplo, los
operadores de comparación == y != tienen una semántica diferente para tipos predefinidos
diferentes:
Dos expresiones de tipo int se
consideran equivalentes si representan
el mismo valor entero.
Dos expresiones de tipo object se
consideran equivalentes si las dos hacen
referencia al mismo objeto o si las dos
son null.
Dos expresiones de tipo string se
consideran equivalentes si las instancias
3. de las cadenas tienen la misma longitud
y caracteres idénticos en cada posición
de carácter o si las dos son null.
El siguiente ejemplo
using System;
class Test
{
static void Main() {
string s = "Test";
string t = string.Copy(s);
Console.WriteLine(s == t);
Console.WriteLine((object)s == (object)t);
}
}
produce el resultado
True
False
porque la primera comparación compara dos expresiones de tipo string, y la segunda
compara dos expresiones de tipo object.