tipos de datos c#

22
Tipos de datos (C# y Java) Visual Studio 2008 Otras versiones Personas que lo han encontrado útil: 3 de 4 - Valorar este tema Actualización: noviembre 2007 En este tema se describen algunas de las similitudes y diferencias principales en cómo se representan y asignan los datos, y se recolectan los elementos no utilizados en Java y en C#. Tipos de datos compuestos El concepto de clase como tipo de datos compuesto de campos, métodos y eventos es similar en Java y C#. (La herencia de clases se describe independientemente en el tema titulado Herencia y clases derivadas (C# y Java) .) C# introduce el concepto de estructura como tipo de datos compuesto asignado por pila que no admite la herencia. En la mayoría de los otros aspectos, las estructuras son muy similares a las clases. Las estructuras proporcionan una manera ligera de agrupar campos y métodos relacionados para el uso en los bucles de pequeñas dimensiones y otros escenarios donde el rendimiento es crucial. C# permite crear un método de destructor al que se llama antes de que se destruyan las instancias de una clase. En Java, se puede utilizar un método finalice para contener código que limpia los recursos antes de que se recolecten los elementos no utilizados del objeto. En C#, el que realiza esta función es el destructor de clase. El destructor se parece a un constructor sin los argumentos y con un carácter de tilde delante (~).

Upload: joki-swan

Post on 27-Nov-2015

437 views

Category:

Documents


0 download

DESCRIPTION

Tipos de datos para c#

TRANSCRIPT

Page 1: Tipos de Datos c#

Tipos de datos (C# y Java)Visual Studio 2008 Otras versiones Personas que lo han encontrado útil: 3 de 4 - Valorar este tema

Actualización: noviembre 2007

En este tema se describen algunas de las similitudes y diferencias principales en cómo se representan y asignan los datos, y se recolectan los elementos no utilizados en Java y en C#.

Tipos de datos compuestos

El concepto de clase como tipo de datos compuesto de campos, métodos y eventos es similar en Java y C#. (La herencia de clases se describe independientemente en el tema titulado Herencia y clases derivadas (C# y Java).) C# introduce el concepto de estructura como tipo de datos compuesto asignado por pila que no admite la herencia. En la mayoría de los otros aspectos, las estructuras son muy similares a las clases. Las estructuras proporcionan una manera ligera de agrupar campos y métodos relacionados para el uso en los bucles de pequeñas dimensiones y otros escenarios donde el rendimiento es crucial.

C# permite crear un método de destructor al que se llama antes de que se destruyan las instancias de una clase. En Java, se puede utilizar un método finalice para contener código que limpia los recursos antes de que se recolecten los elementos no utilizados del objeto. En C#, el que realiza esta función es el destructor de clase. El destructor se parece a un constructor sin los argumentos y con un carácter de tilde delante (~).

Tipos de datos integrados

C# proporciona todos los tipos de datos que están disponibles en Java y agrega compatibilidad para los números sin signo y un nuevo tipo de punto flotante de 128 bits de alta precisión.

Para cada tipo de datos primitivo en Java, la biblioteca de clases principal proporciona una clase contenedora, que lo representa como un objeto de Java. Por ejemplo, la clase Int32 contiene el tipo de datos int y la clase Double contiene el tipo de datos double.

Por otro lado, todos los tipos de datos primitivos en C# son objetos en el espacio de nombres System. Para cada tipo de datos, se proporciona un nombre corto o alias. Por

Page 2: Tipos de Datos c#

ejemplo, int es el nombre corto correspondiente a System.Int32 y double es la forma abreviada de System.Double.

En la tabla siguiente se proporciona la lista de tipos de datos de C# y sus alias. Como puede ver, los primeros ocho de estos tipos corresponden a los tipos primitivos disponibles en Java. Sin embargo, tenga en cuenta que el tipo boolean de Java se denomina bool en C#.

Nombre corto

Clase .NET

Tipo Ancho Intervalo (bits)

byte Byte Entero sin signo 8 0 a 255sbyte SByte Entero con signo 8 -128 a 127

int Int32 Entero con signo 32-2.147.483.648 a 2.147.483.647

uint UInt32 Entero sin signo 32 0 a 4294967295short Int16 Entero con signo 16 -32.768 a 32.767ushort UInt16 Entero sin signo 16 0 a 65535

long Int64 Entero con signo 64-922337203685477508 a 922337203685477507

ulong UInt64 Entero sin signo 64 0 a 18446744073709551615

float SingleTipo de punto flotante de precisión simple

32 -3,402823e38 a 3,402823e38

double DoubleTipo de punto flotante de precisión doble

64-1,79769313486232e308 a 1,79769313486232e308

char Char Un carácter Unicode 16Símbolos Unicode utilizados en el texto

bool Boolean Tipo Boolean lógico 8 True o false

object ObjectTipo base de todos los otros tipos

string String Una secuencia de caracteres

decimal Decimal

Tipo preciso fraccionario o integral, que puede representar números decimales con 29 dígitos significativos

128 ±1.0 × 10e−28 a ±7.9 × 10e28

Dado que C# representa todos los tipos de datos primitivos como objetos, es posible llamar a un método de objeto de un tipo de datos primitivo. Por ejemplo:

C#static void Main()

Page 3: Tipos de Datos c#

{ int i = 10; object o = i; System.Console.WriteLine(o.ToString());}

Esto se logra con la ayuda de las conversiones automáticas boxing y unboxing. Para obtener más información, vea Conversión boxing y unboxing (Guía de programación de C#).

Constantes

Java y C# proporcionan la capacidad para declarar una variable cuyo valor se especifica en tiempo de compilación y no se puede cambiar en tiempo de ejecución. Java utiliza el modificador de campo final para declarar este tipo de variable, mientras que C# utiliza la palabra clave const. Además de const, C# proporciona la palabra clave readonly para declarar variables a las que se puede asignar un valor una vez en tiempo de ejecución, ya sea en la instrucción de declaración o en otra parte del constructor. Después de la inicialización, el valor de una variable readonly no puede cambiar. Un escenario en el que las variables readonly son útiles es cuando los módulos que se han compilado independientemente tienen que compartir datos como un número de versión. Si el módulo A se actualiza y se vuelve a compilar con un nuevo número de versión, el módulo B se puede inicializar con ese nuevo valor constante sin tener que volver a compilarlo.

Enumeraciones

Las enumeraciones se utilizan para agrupar constantes con nombres en forma similar a la forma en que se utilizan en C y C++; no están disponibles en Java. En el ejemplo siguiente se define una enumeración Color sencilla.

C#public enum Color{ Green, //defaults to 0 Orange, //defaults to 1 Red, //defaults to 2 Blue //defaults to 3}

Page 4: Tipos de Datos c#

También se pueden asignar valores integrales a las enumeraciones, tal como se muestra en la siguiente declaración de enumeración:

C#public enum Color2{ Green = 10, Orange = 20, Red = 30, Blue = 40}

En el siguiente ejemplo de código se llama al método GetNames del tipo Enum para mostrar las constantes disponibles para una enumeración. Luego, asigna un valor a una enumeración y muestra el valor.

C#class TestEnums{ static void Main() { System.Console.WriteLine("Possible color choices: ");

//Enum.GetNames returns a string array of named constants for the enum. foreach(string s in System.Enum.GetNames(typeof(Color))) { System.Console.WriteLine(s); }

Color favorite = Color.Blue;

System.Console.WriteLine("Favorite Color is {0}", favorite); System.Console.WriteLine("Favorite Color value is {0}", (int) favorite); }}

Resultado

Possible color choices:

Green

Orange

Page 5: Tipos de Datos c#

Red

Blue

Favorite Color is Blue

Favorite Color value is 3

Cadenas

Los tipos de cadena en Java y C# denotan un comportamiento similar con leves diferencias. Ambos tipos de cadena son inmutables, lo que significa que los valores de las cadenas no se pueden cambiar una vez que se han creado las cadenas. En ambos casos, los métodos que parecen modificar el contenido real de una cadena crean en realidad una nueva cadena que se devolverá como resultado, dejando la cadena original sin cambios. El proceso de comparación de los valores de cadena es diferente en C# y Java. Para comparar los valores de cadena en Java, los desarrolladores deben llamar al método equals de un tipo string, mientras que el operador == compara los tipos de referencia de forma predeterminada. En C#, los desarrolladores pueden utilizar los operadores == o != para comparar directamente valores de cadena. Aunque una cadena es un tipo de referencia en C#, los operadores == y != compararán, en forma predeterminada, los valores de las cadenas en lugar de las referencias.

Como en Java, los desarrolladores de C# no deben usar el tipo string para concatenar cadenas con el fin de evitar la sobrecarga de crear nuevas clases de cadenas cada vez que se concatene la cadena. En su lugar, los desarrolladores pueden utilizar la clase StringBuilder, que es funcionalmente equivalente a la clase StringBuffer de Java.

Literales de cadena

C# proporciona la posibilidad de evitar el uso de secuencias de escape como "\t" para la ficha o "\" para los caracteres de barra diagonal inversa dentro de las constantes de cadena. Para ello, simplemente declare la cadena textual mediante el símbolo @ para preceder la asignación del valor de cadena. Los siguientes ejemplos muestran cómo utilizar los caracteres de escape y cómo asignar literales de cadena:

C#static void Main(){ //Using escaped characters: string path1 = "\\\\FileShare\\Directory\\file.txt"; System.Console.WriteLine(path1);

Page 6: Tipos de Datos c#

//Using String Literals: string path2 = @"\\FileShare\Directory\file.txt"; System.Console.WriteLine(path2);}

Conversión y conversión de tipos

Java y C# siguen reglas similares para la conversión automática y la conversión de tipos de datos.

Al igual que Java, C# admite conversiones de tipo implícitas y explícitas. En el caso de conversiones de ampliación, las conversiones son implícitas. Por ejemplo, la siguiente conversión de int a long es implícita, como en Java:

C#int int1 = 5;long long1 = int1; //implicit conversion

La siguiente es una lista de conversiones implícitas entre los tipos de datos de .NET Framework:

Tipo de origen Tipo de destinoByte short, ushort, int, uint, long, ulong, float, double o decimalSbyte short, int, long, float, double o decimalInt long, float, double o decimalUint long, ulong, float, double o decimalShort int, long, float, double o decimalUshort int, uint, long, ulong, float, double o decimalLong float, double o decimalUlong float, double o decimalFloat doubleChar ushort, int, uint, long, ulong, float, double o decimal

Puede convertir el tipo de expresiones que desee convertir explícitamente usando la misma sintaxis que en Java:

C#long long2 = 5483;int int2 = (int)long2; //explicit conversion

Page 7: Tipos de Datos c#

La tabla siguiente muestra las conversiones explícitas.

Tipo de origen Tipo de destinoByte sbyte o charSbyte byte, ushort, uint, ulong o charInt sbyte, byte, short, ushort, uint, ulong o charUint sbyte, byte, short, ushort, int o charShort sbyte, byte, ushort, uint, ulong o charUshort sbyte, byte, short o charLong sbyte, byte, short, ushort, int, uint, ulong o charUlong sbyte, byte, short, ushort, int, uint, ulong o charFloat sbyte, byte, short, ushort, int, uint, long, ulong, char o decimalDouble sbyte, byte, short, ushort, int, uint, long, ulong, char o decimalChar sbyte, byte o shortDecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float o doubleTipos de referencia y valor

C# admite dos tipos de variables:

Tipos de valor

Estos son los tipos de datos primitivos integrados, como char, int y float, así como también los tipos definidos por el usuario declarado con la estructura.

Tipos de referencia

Clases y otros tipos de datos complejos que se construyen a partir de los tipos primitivos. Las variables de estos tipos no contienen una instancia del tipo, sino sólo una referencia a una instancia.

Si se crean dos variables del tipo de valor, i y j, como se muestra a continuación, i y j son completamente independientes entre sí:

C#int i = 10;int j = 20;

Page 8: Tipos de Datos c#

Tienen ubicaciones de memoria independiente:

Si cambia el valor de una de estas variables, la otra no se verá afectada de forma natural. Por ejemplo, si tiene una expresión como la siguiente, aún no existe ninguna conexión entre las variables:

C#int k = i;

Es decir, si cambia el valor de i, k permanecerá con el valor que tenía i en el momento de la asignación.

C#i = 30;

System.Console.WriteLine(i.ToString()); // 30System.Console.WriteLine(k.ToString()); // 10

Sin embargo, los tipos de referencia actúan de forma diferente. Por ejemplo, podría declarar dos variables de la siguiente forma:

C#Employee ee1 = new Employee();Employee ee2 = ee1;

Ahora, puesto que las clases son tipos de referencia de C#, ee1 se conoce como referencia a Employee. La primera de las dos líneas anteriores crea una instancia de Employee en memoria y define ee1 para que haga referencia a ella. Así, cuando se establece ee2 para que sea igual a ee1, el primero contiene un duplicado de la referencia a la clase de la memoria. Si ahora cambia las propiedades de ee2, las propiedades de ee1

Page 9: Tipos de Datos c#

reflejan estos cambios, ya que ambas apuntan al mismo objeto de la memoria, tal como aparece a continuación:

Conversiones boxing y unboxing

El proceso de convertir el tipo de un valor en el tipo de una referencia se denomina conversión boxing. El proceso inverso, convertir el tipo de una referencia en el tipo de un valor, se denomina conversión unboxing. Esto queda reflejado en el ejemplo de código siguiente:

C#int i = 123; // a value typeobject o = i; // boxingint j = (int)o; // unboxing

Java requiere que esas conversiones se realicen manualmente. Los tipos de datos primitivos se pueden convertir en objetos de clases contenedoras construyendo esos objetos o aplicando la conversión boxing. De igual manera, los valores de los tipos de datos primitivos se pueden extraer de los objetos de las clases contenedoras llamando a un método adecuado de estos objetos, o realizar una conversión unboxing. Para obtener más información acerca de las conversiones boxing y unboxing, vea Conversión boxing y unboxing (Guía de programación de C#).

http://msdn.microsoft.com/es-es/library/ms228360%28v=vs.90%29.aspx

UNIDAD I: C# NET ELEMENTOS BÁSICOS

Page 10: Tipos de Datos c#

TEMA 4: C# NET DECLARACION Y TIPO DE VARIABLES

A toda variable que se use en un programa, se deberá declarar de preferencia al principio del programa.

En C# NET (también se le conoce como C# ) existen los siguientes tipos de variables:

C# Tipo.Net Framework

(System) typeSigned?

Bytes en Ram

Rango

sbyte System.Sbyte Yes 1 -128 a 127short System.Int16 Yes 2 -32768 a 32767int System.Int32 Yes 4 -2147483648 a 2147483647

long System.Int64 Yes 8-9223372036854775808 a

9223372036854775807byte System.Byte No 1 0 a 255

ushort System.Uint16 No 2 0 a 65535uint System.UInt32 No 4 0 a 4294967295

ulong System.Uint64 No 8 0 a 18446744073709551615

float System.Single Yes 4Aprox. ±1.5 x 10-45 a ±3.4 x 1038 con

7 decimales

double System.Double Yes 8Aprox. ±5.0 x 10-324 a ±1.7 x 10308

con 15 o 16 decimales

decimal System.Decimal Yes 12Aprox. ±1.0 x 10-28 a ±7.9 x 1028 con

28 o 29 decimaleschar System.Char N/A 2 Cualquier caracter Unicodebool System.Boolean N/A 1 / 2 true o false

En particular cada tipo de dato que se menciona aquí es en realidad un OBJETO, que se deriva a su vez de una clase que provee el framework de microsoft net es por eso que se incluye la clase de la cual proviene el tipo de dato.

Es decir en un programa se podrá declarar una variable por ejemplo float pi; o también se podrá declarar y crear un objeto derivado de esa clase, por ejemplo System.Float alfa = new System.Float(); para este caso observar y tener en cuenta dos cosas:

Observar cómo se declara y crea un objeto ( este formato de creación de objetos aprenderlo bien).

Como objeto alfa podrá usar todas las propiedades y métodos asociadas al objeto, más adelante se ve un tema donde se analiza más a fondo el concepto de clases y objetos.

Page 11: Tipos de Datos c#

Signed significa que se puede usar el signo + o - al usar la variable.

Por ultimo variables strings o variables cadena, se podrán crear usando la clase STRING que creara un objeto de dicho tipo.

Para declarar un variable en un script o programa solo usar el siguiente formato:

Tipo de dato lista de variables; ejemplo:

string nombre, ciudad;

int alfa, beta;

string ciudad=“tijuana”;

float pi=3.1416;

Para el caso de objetos numéricos derivados de la clase respectiva, solo usar el formato que se indicó en los párrafos de arriba.

Recordar que c# net es case-sensitive, es decir reconoce la diferencia que hay entre mayúsculas y minúsculas, en otras palabras no declarar alfa e intentar capturar o desplegar ALFA.

Para convertir números a strings no hay problema, solo cargar o asignar el número o variable numérica a la variable string, pero para convertir strings a números existen y deberán usarse los métodos Parse de las clases respectivas ejemplo;

String beta1=“100”;

Int beta2 = System.Int32.Parse(beta1);

Las secuencias de escape que reconoce c#(csharp) y que se pueden usar dentro de una string son:

Character Escape Sequence' \'

Page 12: Tipos de Datos c#

” \”\

Alert \aBackspace \bForm feed \fNew Line \n

Carriage Return \rHorizontal Tab \t

Vertical Tab \vA unicode character specified by its number e.g. \u200 \u

A unicode character specified by its hexidecimal code e.g. \xc8 \xNull \0 (zero)

Tipos de datos primitivos en C#

Los tipos de datos primitivos son aquellos que almacenan directamente el valor, a diferencia de los tipos de datos referencia que almacenan la dirección de memoria donde se almacena el dato (los objetos son tipo de datos referencia)

Los tipos de datos primitivos los podemos agrupar en:

Tipos enteros

Según el valor entero máximo a almacenar podemos elegir entre: int (–2147483,648, 2147483647) (es el que normalmente hemos elegido hasta este momento cada vez que necesitamos almacenar un valor entero), byte (podemos almacenar un valor entre 0 y 255), sbyte (-128 y 127), short (-32768, 32767), ushort (0, 65535), uint (0, 4294967295), long (–9223372036854775808, 9223372036854775807) y ulong (0, 18446744073709551615)

Problema 1:

Confeccionar un programa que defina variables enteras una por cada tipo. Mostrar por pantalla el valor almacenado en cada variable

Programa:using System;

Page 13: Tipos de Datos c#

using System.Collections.Generic;using System.Linq;using System.Text;

namespace TiposDatosPrimitivos1{ class Program { static void Main(string[] args) { byte v1 = 200; Console.WriteLine("Valor almacenado en la variable de tipo byte:" + v1); sbyte v2=-100; Console.WriteLine("Valor almacenado en la variable de tipo sbyte:" + v2); short v3 = 30000; Console.WriteLine("Valor almacenado en la variable de tipo short:" + v3); ushort v4 = 60000; Console.WriteLine("Valor almacenado en la variable de tipo ushort:" + v4); int v5 = -2000000000; Console.WriteLine("Valor almacenado en la variable de tipo int:" + v5); uint v6 = 2000000000; Console.WriteLine("Valor almacenado en la variable de tipo uint:" + v6); long v7 = -1000000000000000000; Console.WriteLine("Valor almacenado en la variable de tipo long:" + v7); ulong v8 = 1000000000000000000; Console.WriteLine("Valor almacenado en la variable de tipo ulong:" + v8); Console.ReadKey(); } }}

Problema 2:

Mostrar el valor máximo y mínimo que puede almacenar cada tipo de dato entero en C#.

Programa:using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace TiposDatosPrimitivos2{ class Program

Page 14: Tipos de Datos c#

{ static void Main(string[] args) { Console.WriteLine("Valor máximo y mínimo para tipo de dato byte."); Console.WriteLine("Mínimo:" + byte.MinValue); Console.WriteLine("Máximo:" + byte.MaxValue); Console.WriteLine("Valor máximo y mínimo para tipo de dato sbyte."); Console.WriteLine("Mínimo:" + sbyte.MinValue); Console.WriteLine("Máximo:" + sbyte.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato short."); Console.WriteLine("Mínimo:" + short.MinValue); Console.WriteLine("Máximo:" + short.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato ushort."); Console.WriteLine("Mínimo:" + ushort.MinValue); Console.WriteLine("Máximo:" + ushort.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato int."); Console.WriteLine("Mínimo:" + int.MinValue); Console.WriteLine("Máximo:" + int.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato uint."); Console.WriteLine("Mínimo:" + uint.MinValue); Console.WriteLine("Máximo:" + uint.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato long."); Console.WriteLine("Mínimo:" + long.MinValue); Console.WriteLine("Máximo:" + long.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato ulong."); Console.WriteLine("Mínimo:" + ulong.MinValue); Console.WriteLine("Máximo:" + ulong.MaxValue); Console.ReadKey(); } }}

Los tipos de datos primitivos tienen asociados clases con una serie de propiedades y métodos. Las propiedades MinValue y MaxValue nos permiten acceder a los valores mínimos y máximos que pueden almacenar cada tipo de dato.

Tipos reales

Podemos almacenar la parte entera y la parte fraccionaria. Disponemos tres tipos de datos reales: float, double y decimal.

Page 15: Tipos de Datos c#

Problema 3:

Mostrar el valor máximo y mínimo que puede almacenar cada tipo de dato real en C#.

Programa:using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace TiposDatosPrimitivos3{ class Program { static void Main(string[] args) { Console.WriteLine("Valor mínimo y máximo para tipo de dato float."); Console.WriteLine("Mínimo:" + float.MinValue); Console.WriteLine("Máximo:" + float.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato double."); Console.WriteLine("Mínimo:" + double.MinValue); Console.WriteLine("Máximo:" + double.MaxValue); Console.WriteLine("Valor mínimo y máximo para tipo de dato decimal."); Console.WriteLine("Mínimo:" + decimal.MinValue); Console.WriteLine("Máximo:" + decimal.MaxValue); Console.ReadKey(); } }}

El tipo de dato decimal es el que más se adecua para almacenar datos monetarios (tiene una precisión de 28 dígitos decimales)

Tipo char

El tipo de dato primitivo char puede almacenar un caracter Unicode.

char letra='A';

Tipo lógico

Puede almacenar el valor true o false.

bool encontrado=false;

Page 16: Tipos de Datos c#

Problema 4:

Mostrar cuantos bytes de memoria requieren cada tipo de dato primitivo en C# (utilizar el operador sizeof)

Programa:

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace TiposDatosPrimitivos4{ class Program { static void Main(string[] args) { Console.WriteLine("Bytes reservados para el tipo byte:" + sizeof(byte)); Console.WriteLine("Bytes reservados para el tipo sbyte:" + sizeof(sbyte)); Console.WriteLine("Bytes reservados para el tipo short:" + sizeof(short)); Console.WriteLine("Bytes reservados para el tipo ushort:" + sizeof(ushort)); Console.WriteLine("Bytes reservados para el tipo int:" + sizeof(int)); Console.WriteLine("Bytes reservados para el tipo uint:" + sizeof(uint)); Console.WriteLine("Bytes reservados para el tipo long:" + sizeof(long)); Console.WriteLine("Bytes reservados para el tipo ulong:" + sizeof(ulong)); Console.WriteLine("Bytes reservados para el tipo float:" + sizeof(float)); Console.WriteLine("Bytes reservados para el tipo double:" + sizeof(double)); Console.WriteLine("Bytes reservados para el tipo decimal:" + sizeof(decimal)); Console.WriteLine("Bytes reservados para el tipo char:" + sizeof(char)); Console.WriteLine("Bytes reservados para el tipo bool:" + sizeof(bool)); Console.ReadKey(); } }}

http://www.csharpya.com.ar/detalleconcepto.php?codigo=180&inicio=40

Page 17: Tipos de Datos c#