Tipos de Datos
Tipos de Datos
Tipos de Datos
C# contiene dos categoras generales de tipos de datos integrados: tipos de valor y tipos de referencia. El trmino tipo de valor indica que esos tipos contienen directamente sus valores. Tipos para definir nmeros enteros:
Tipo
Equivalente BCL
Tamao
Rango
Significado
byte
System.Byte
sbyte
System.SByte
short
System.Int16
16-bit (2byte)
-32.768 a 32.767
0 a 65.535
int
System.Int32
32-bit (4byte)
-2.147.483.648 a 2.147.483.647
uint
0 a 4.294.967.295
long
System.Int64
64-bit (8byte)
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
ulong
0 a 18.446.744.073.709.551.615
Los tipos de coma flotante pueden representar nmeros con componentes fraccionales. Existen dos clases de tipos de coma flotante: float y double. El tipo double es el ms utilizado porque muchas funciones matemticas de la biblioteca de clases de C# usan valores double. Quiz, el tipo de coma flotante ms interesante de C# es decimal, dirigido al uso de clculos monetarios. La aritmtica de coma flotante normal
est sujeta a una variedad de errores de redondeo cuando se aplica a valores decimales. El tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales.
Tipo
Equivalente BCL
Tamao
Rango
Significado
float
System.Single
32-bit (4-byte)
1.401298E45 a 3.402823E+38
double
System.Double
64-bit (8-byte)
4.94065645841246E324 a 1.79769313486232E+308
Los caracteres en C# no tienen un tamao de 8 bits como en otros muchos lenguajes de programacin, sino que usa un tamao de 16 bits llamado Unicode al cual se le llama char. No existen conversiones automticas de tipo entero a char.
Tipo
Equivalente BCL
Tamao
Rango
Significado
Para los tipos de datos lgicos no existen conversiones automticas de tipo entero a bool.
Tipo
Equivalente BCL
Tamao
Rango
Significado
Variables
Las variables son identificadores asociados a valores. Se declaran indicando el tipo de dato que almacenar y su identificador.
Un identificador puede:
empezar por "_". contener caracteres Unicode en maysculas y minsculas (sensible a maysculas y minsculas).
Un identificador no puede:
empezar por un nmero. empezar por un smbolo, ni aunque sea una palabra clave. contener ms de 511 caracteres.
Declarar una variable: int miNumero; // Declaramos la variable, pero no la inicializamos con ningn valor. Para asignar un valor a una variable, se indica el identificador de la misma, seguido del smbolo igual ( =) y el valor que queremos que almacene: miNumero = 5; // Asignamos el valor '5'. Tambin se puede declarar y asignar un valor al mismo tiempo: int miNumero = 5; // Declaramos la variable, y asignamos el valor '5'.
Constantes
Las constantes son valores inmutables, y por tanto no se pueden cambiar.
const
Cuando se declara una constante con la palabra clave const, tambin se debe asignar el valor. Tras esto, la constante queda bloqueada y no se puede cambiar. Son implcitamente estticas ( static). const double PI = 3.1415;
readonly
A diferencia de const, no requiere que se asigne el valor al mismo tiempo que se declara. Pueden ser miembros de la instancia o miembros estticos de la clase (static). readonly double E; E = 2.71828; [editar]Operadores
Categora
Operadores
Aritmtico
+ - * / %
Concatenacin
Incremento, decremento
++ --
Desplazamiento
<< >>
Relacional
Asignacin
= ^= <<= >>=
Acceso a miembro
Indexacin
[ ]
Conversin
( )
Condicional
? :
Creacin de objecto
new
Informacin de tipo
as is sizeof typeof
Los operadores aritmticos funcionan igual que en C y C++. El resultado de los operadores relacionales y lgicos es un valor de tipo bool. Los operadores de cortocircuito evalan el segundo operando solo cuando es necesario. Los operadores a nivel de bits no se pueden aplicar a tipos bool, float, double o decimal.
Instrucciones de control
if-else
if (i == 2) { // ... } else if (i == 3) { // ... } else { // ... }
switch
switch (i) { case 1: ... break; case 2: case 3: ... break; default: ... break; }
for
for (int i = 0; i < 10; i++) { // ... }
while
while (i < 10) { // ... }
do-while
do { // ... } while (true);
foreach
foreach (char c in charList) { // ... }
Las instrucciones if-else, for, while, do-while, switch, return, break, continue son, bsicamente, iguales que en C, C++ y Java.
La instruccin foreach, al igual que en Java, realiza un ciclo a travs de los elementos de una matriz o coleccin. En este ciclo se recorre la coleccin y la variable recibe un elemento de dicha coleccin en cada iteracin.
Matrices
En C# las matrices se implementan como objetos. Los ndices de las matrices comienzan en 0. Ya que C# implementa las matrices como objetos, cada matriz tiene una propiedad Length que contiene el nmero de elementos que puede alojar o tiene alojados. Declarar una matriz: int[] intArray = new int[5]; Declarar e inicializar una matriz (el tamao de la matriz se puede omitir): int[] intArray = new int[] {1, 2, 3, 4, 5}; Acceder a un elemento: intArray[2]; // Retornar el valor '3' Declarar una matriz multidimensional: int[,] intMultiArray = new int[3, 2]; // 3 filas y 2 columnas Declarar e inicializar una matriz multidimensional (el tamao de la matriz se puede omitir): int[,] intMultiArray = new int[,] { {1, 2}, {3, 4}, {5, 6} }; Acceder a un elemento de una matriz multidimensional: intMultiArray[2, 0]; // Retornar el valor '5' Ms informacin en: Tutorial de matrices (C#) (en ingls).
Clases y objetos
Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).
El operador de asignacin no copia los valores de un objeto, sino la referencia al mismo (al igual que Java).
Un constructor tiene el mismo nombre que su clase y es sintcticamente similar a un mtodo. Un constructor no devuelve ningn valor.
Al igual que los mtodos, los constructores tambin pueden ser sobrecargados. Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor 0, null o false segn corresponda.
Cuando un objeto no es referenciado por ninguna variable, el recolector de basura ejecuta el destructor de dicha clase y libera la memoria utilizada.
El destructor de una clase no se llama cuando un objeto sale del mbito. Todos los destructores se llamarn antes de que finalice un programa. La palabra clave this es una referencia al mismo objeto en el cual se usa. La palabra clave static hace que un miembro pertenezca a una clase en vez de pertenecer a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto.
Un mtodo static no tiene una referencia this. Un mtodo static puede llamar slo a otros mtodos static. Un mtodo static slo debe tener acceso directamente a datos static. Un constructor static se usa para inicializar atributos que se aplican a una clase en lugar de aplicarse a una instancia.
C# permite la sobrecarga de operadores (+, -, *, etc.) con la palabra clave operator. Al comparar objetos (==, !=, <, >, <=, >=) se comprueba si hacen referencia al mismo objeto.
Declarar una clase: class Clase { } Inicializar una clase (tambin llamado crear un objeto de la clase o instanciar una clase): Clase c = new Clase(); Constructor (como si fuera un mtodo): class Clase { Clase() { // ... } } Destructor (como si fuera un mtodo, precedido del smbolo '~'): class Clase { ~Clase() { // ... } }
this:
class Clase { int i = 1; Clase() { this.Arrancar(); // Llamar al mtodo 'Arrancar' del objeto } void Arrancar() { // ... } }
static:
class Clase { static int i = 1; } Clase.i; // Retornar el valor '1'. No hace falta crear un objeto, ya que al ser 'static', pertenece a la clase.
operator:
class Clase { static int operator +(int x, int y) { // Sobrecarga el operador '+' // ... } static int operator -(int x, int y) { // Sobrecarga el operador '-' // ... } static int operator int(byte x) { // Sobrecarga la conversin de tipo 'byte' a 'int' // ... } }