Diferencia entre revisiones de «C Sharp»
m C Sostenido ha sido trasladado a C Sharp: A petición de GermanX por traslado improcedente |
|||
Línea 126: | Línea 126: | ||
C# también tiene un tipo de datos lógicos, el cual representa los valores verdadero o falso. Este tipo de dato se llama '''bool'''. No existe una conversión definida entre '''bool''' y los valores enteros (1 no se convierte a verdadero ni 0 se convierte a falso). |
C# también tiene un tipo de datos lógicos, el cual representa los valores verdadero o falso. Este tipo de dato se llama '''bool'''. No existe una conversión definida entre '''bool''' y los valores enteros (1 no se convierte a verdadero ni 0 se convierte a falso). |
||
P.D.: |
|||
Yessica, c# no permite el uso de punteros |
|||
== Constantes == |
== Constantes == |
Revisión del 19:14 16 jul 2008
Plantilla:Infobox lenguaje de programación
C# (pronunciado "si sharp") es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA e ISO.
Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma.NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (más notablemente de Delphi y Java).
El símbolo # viene de sobreponer "++" sobre "++" y eliminar las separaciones, indicando así su descendencia de C++.
C#, como parte de la plataforma.NET, está normalizado por ECMA desde diciembre de 2001 (ECMA-334 "Especificación del Lenguaje C#"). El 7 de noviembre de 2005 salió la versión 2.0 del lenguaje que incluía mejoras tales como tipos genéricos, métodos anónimos, iteradores, tipos parciales y tipos anulables. El 2 de Febrero del 2008 salió la versión 3.0 de C# destacando entre las mejoras los tipos implícitos, tipos anónimos y el LINQ (Language Integrated Query).
Aunque C# forma parte de la plataforma.NET, ésta es una interfaz de programación de aplicaciones; mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado el que provee el Framework de DotGNU - Mono es que no generen programas para dicha plataforma, sino para una plataforma diferente como Win32 o UNIX / Linux.
Tipos de datos
C# contiene dos categorías generales de tipos de datos integrados: tipos de valor y tipos de referencia. El término tipo de valor indica que esos tipos contienen directamente sus valores.
C# define ocho tipos de enteros, los cuales son los siguientes:
Tipo de datos de enteros | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
byte | 8 | De 0 a 255 | Entero sin signo de 8 bits |
sbyte | 8 | De -128 a 127 | Entero con signo de 8 bits |
short | 16 | De -32.768 a 32.767 | Entero corto |
ushort | 16 | De 0 a 65.535 | Entero corto sin signo |
int | 32 | De -2.147.483.648 a 2.147.483.647 | Entero medio |
uint | 32 | De 0 a 4.294.967.295 | Entero medio sin signo |
long | 64 | De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | Entero largo |
ulong | 64 | De 0 a 18.446.744.073.709.551.615 | Entero largo sin signo |
Los tipos de punto flotante pueden representar números con componentes fraccionales. Existen dos clases de tipos de punto flotante; float y double. El tipo double es el más utilizado porque muchas funciones matemáticas de la biblioteca de clases de C# usan valores double. Quizá, el tipo flotante más interesante de C# es decimal, dirigido al uso de cálculos monetarios. La aritmética de punto 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 de datos de punto flotante | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
float | 32 | De 1,5E-45 a 3,4E+38 | Punto flotante corto |
double | 64 | De 5E-324 a 1,7E+308 | Punto flotante largo |
decimal | 128 | De 1E-28 a 7,9E+28 | Punto flotante monetario |
Los caracteres en C# no son cantidades de 8 bits como en otros muchos lenguajes de programación. Por el contrario, C# usa un tipo de caracteres de 16 bits llamado Unicode al cual se le llama char. No existen conversiones automáticas de tipo entero a char.
Tipo de datos de carácteres | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
char | 16 | De 0 a 65,535 (código Unicode) | Carácter |
C# también tiene un tipo de datos lógicos, el cual representa los valores verdadero o falso. Este tipo de dato se llama bool. No existe una conversión definida entre bool y los valores enteros (1 no se convierte a verdadero ni 0 se convierte a falso).
P.D.:
Yessica, c# no permite el uso de punteros
Constantes
Las constantes en C# se denominan literales. Todas las constantes tienen un tipo de dato, en caso de ser una constante entera se usa la de menor tamaño que pueda alojarla, empezando por int y en caso de punto flotante se considera como un double. Sin embargo se pueden especificar explícitamente el tipo de dato que una constante deberá usar, por medio de los sufijos:
Sufijo | Tipo de dato | Ejemplo |
---|---|---|
L | long | 12L |
UL | ulong | 68687UL |
F | float | 10,19F |
M | decimal | 9,95M |
En ocasiones, resulta más sencillo usar un sistema numérico basado en 16 en lugar de 10, para tal caso C# permite especificar constantes enteras en formato hexadecimal, y se hace empezando con 0x. Ejemplo: 0xFF es un 255 en decimal.
C# provee de algunos carácteres denominados secuencias de escape:
Secuencia de escape | Descripción |
---|---|
\a | Alerta (timbre) |
\b | Retroceso |
\f | Avance de página |
\n | Nueva línea |
\r | Retorno de carro |
\t | Tabulador horizontal |
\v | Tabulador vertical |
\0 | Nulo |
\' | Comilla sencilla |
\" | Comilla doble |
\\ | Diagonal invertida |
C# al igual que C++ es compatible con el tipo de constante cadena de caracteres. Dentro de la cadena de caracteres se pueden usar secuencias de escape. Una cadena de caracteres puede iniciar con el símbolo @ seguido por una cadena entre comillas, en este caso, todas las secuencias de escape no se respetan, además así la cadena puede ocupar dos o más líneas.
Variables
Toda variable se debe de declarar antes de ser utilizada. La forma en que se declara una variable en C# es la siguiente:
tipo nombre_variable;
Para asignar un valor a una variable:
nombre_variable = valor
Las conversiones de tipo de variables en C# se representan en la siguiente tabla en donde la fila es el origen y la columna el destino. Los significados de las letras son: A (Conversión automática o implícita), E (Conversión explícita), I (Conversión incompatible).
Conversiones de tipo de datos | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
byte | sbyte | short | ushort | int | uint | long | ulong | float | double | decimal | char | bool | |
byte | E | A | A | A | A | A | A | E | E | E | E | I | |
sbyte | E | A | A | A | A | A | A | E | E | E | E | I | |
short | E | E | E | A | A | A | A | E | E | E | E | I | |
ushort | E | E | E | A | A | A | A | E | E | E | E | I | |
int | E | E | E | E | E | A | A | E | E | E | E | I | |
uint | E | E | E | E | E | A | A | E | E | E | E | I | |
long | E | E | E | E | E | E | E | E | E | E | E | I | |
ulong | E | E | E | E | E | E | E | E | E | E | E | I | |
float | E | E | E | E | E | E | E | E | A | E | I | I | |
double | E | E | E | E | E | E | E | E | E | E | I | I | |
decimal | E | E | E | E | E | E | E | E | E | E | I | I | |
char | E | E | E | E | E | E | E | E | I | I | I | I | |
bool | I | I | I | I | I | I | I | I | I | I | I | I |
- Toda conversión implícita no ocasiona pérdida de información, truncamientos o redondeos.
- Es posible (mas no siempre ocurre) que en una conversión explícita haya pérdida de información, truncamientos o redondeos.
- En toda conversión implícita el tipo de dato destino es mayor que el tipo de dato origen.
- La conversión explícita se realiza de la siguiente forma:
(tipo-destino) expresion
.
Además de realizarse dentro de una asignación, las conversiones de tipos también tienen lugar dentro de una expresión, pues en cada operación ambos operandos deben de ser del mismo tipo. Si la conversión es del tipo implícito se efectúa el siguiente algoritmo en dicho orden:
- Si un operando es decimal, el otro operando se transforma a decimal.
- Si un operando es double, el otro operando se transforma a double.
- Si un operando es float, el otro operando se transforma a float.
- Si un operando es ulong, el otro operando se transforma a ulong.
- Si un operando es long, el otro operando se transforma a long.
- Si un operando es uint, y si el otro operando es de tipo sbyte, short o int, los dos se transforman a long.
- Si un operando es uint, el otro operando se transforma a uint.
- Si ninguno de los casos anteriores, los dos operandos se transforman a int.
Operadores
C# tiene cuatro clases generales de operadores: aritméticos, a nivel de bit, relacionales y lógicos.
Operadores | ||
---|---|---|
Operador | Significado | Tipo |
+ | Suma | Aritmético |
- | Resta | Aritmético |
* | Multiplicación | Aritmético |
/ | División | Aritmético |
% | Módulo (residuo entero) | Aritmético |
++ | Incremento | Aritmético |
-- | Decremento | Aritmético |
== | Igual que | Relacional |
!= | Distinto que | Relacional |
> | Mayor que | Relacional |
< | Menor que | Relacional |
>= | Mayor o igual que | Relacional |
<= | Menor o igual que | Relacional |
& | AND | Lógico y a nivel de bits |
| | OR | Lógico y a nivel de bits |
^ | XOR y de nivel de bits | Lógico |
|| | OR de cortocircuito | Lógico |
&& | AND de cortocircuito | Lógico |
! | NOT | Lógico |
~ | Complemento a uno | A nivel de bits |
<< | Desplazamiento a la izquierda | A nivel de bits |
>> | Desplazamiento a la derecha | A nivel de bits |
- Los operadores aritméticos funcionan igual que en C y C++.
- El resultado de los operadores relacionales y lógicos es un valor bool.
- Los operadores de cortocircuito evaluan el segundo operando solo cuando es necesario.
- Los operadores a nivel de bit no se pueden aplicar a tipos bool, float, double o decimal.
Instrucciones de control
- La instrucción if-else es básicamente igual que en C, C++ y Java.
- La diferencia de la instrucción switch con la versión de C, C++ y Java es que todo cuerpo perteneciente a un case debe de toparse con un break o un goto antes de toparse con otro case.
- La instrucción for es básicamente igual que en C, C++ y Java.
- La instrucción while es básicamente igual que en C, C++ y Java.
- La instrucción do-while es básicamente igual que en C, C++ y Java.
- La instrucción foreach realiza un ciclo a través de los elementos de una colección (grupo de objetos). El formato de esta instrucción es:
foreach(tipo variable in coleccion) instruccion;
. En este ciclo se recorre la colección y la variable recibe un respectivo elemento de dicha colección en cada iteración. - Al igual que en C y C++, la instrucción break permite forzar la salida de un ciclo omitiendo el código restante en el cuerpo del ciclo.
- Al igual que en C y C++, la instrucción continue permite forzar la repetición temprana de un ciclo omitiendo el código restante en el cuerpo del ciclo.
- La instrucción return es básicamente igual que en C, C++. Se utiliza para devolver un valor y salir de un método.
- La instrucción goto se sigue utilizando en C# a pesar de toda la polémica que esto conlleva.
Métodos
- Todo método debe de ser parte de una clase, no existen métodos globales.
- De forma predeterminada, los parámetros se pasan por valor (se copia dicho valor).
- El modificador ref fuerza a pasar los parámetros por referencia en vez de pasarlos por valor.
- El modificador out es similar al modificador ref con una excepción: sólo se puede utilizar para pasar un valor fuera de un método. El método debe de asignar un valor al parámetro antes de que el método finalice.
- Cuando ref y out modifican un parámetro de referencia, la propia referencia se pasa por referencia.
- El modificador params sirve para definir un número variable de argumentos los cuales se implementan como una matriz. Ejemplo:
public int maxVal(params int[] nums){...}
, esta función se podría llamar así:maxVal(23,3,a,-12);
. - Un método debe tener como máximo un único parámetro params y éste debe de ser el último.
- Un método puede devolver cualquier tipo de datos, incluyendo tipos de clase.
- Ya que en C# las matrices se implementan como objetos, un método también puede devolver una matriz (algo que se diferencía de C++ en que las matrices no son válidas como tipos de valores devueltos).
- C# implementa sobrecarga de métodos, dos o más métodos pueden tener el mismo nombre siempre y cuando se diferencíen por sus parámetros.
- El método Main es un método especial al cual se refiere el punto de partida del programa. Tiene la siguiente sintaxis:
public static int Main(string[] args){...}
.
Clases y objetos
Varios puntos a tener en cuenta en C# con respecto a clases y objetos son los siguientes:
- Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).
- El operador de asignación no copia los valores de un objeto, sino su referencia a él (al igual que Java).
- Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a un método.
- Un constructor no regresa ningún valor.
- Al igual que los métodos, los constructores también 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 de 0 o null según corresponda.
- Para crear un nuevo objeto se utiliza la siguiente sintaxis:
variable = new nombre_clase();
. - Un destructor se declara como un constructor, aunque va precedido por un signo de tilde ~.
- Se emplea una desasignación de memoria de objetos no referenciados (recolección de basura), y cuando esto ocurre se ejecuta el destructor de dicha clase.
- El destructor de una clase no se llama cuando un objeto sale del ámbito.
- Todos los destructores se llamarán antes de que finalice un programa.
- La palabra clave this es un apuntador al mismo objeto en el cual se usa.
- La palabra clave static hace que un miembro pertenezca a una clase en vez de pertener 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 método staticno tiene una referencia this.
- Un método static puede llamar sólo a otros métodos static.
- Un método static sólo 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 con la palabra clave operator.
Matrices
- En C# las matrices se implementan como objetos.
- Para crear una matriz se utiliza el siguiente formato:
tipo[] nombre_matriz = new tipo[tamaño]
- Se puede crear una matriz inicializada asi:
tipo[] nombre_matriz = { val1 , val2 , val3 , ... , valN };
- Los índices de las matrices comienzan en 0.
- Para crear una matriz bidimensional se utiliza el siguiente formato:
tipo[,] nombre_matriz = new tipo[filas,columnas]
- Para referirse a un elemento de una matriz bidimensional no se usa la forma
matriz[fila][columna]
(la cual usa C++), si nomatriz[fila,columna]
. - Ya que C# implementa matrices como objetos, cada matriz tiene asociada una propiedad Length que contiene el número de elementos que puede alojar cada matriz.
Cadenas de carácteres
- El tipo de dato cadena se llama string.
- Realmente la palabra clave string es un alias de la clase System.String de la plataforma .NET.
- En C# las cadenas son objetos y no una matriz de caracteres, aun así, se puede obtener un carácter arbitrario de una cadena por medio de su índice (mas no modificarlo).
- La forma más común de construir una cadena es por medio de una literal o constante:
string str = "Una cadena";
- El operador == determina si dos referencias hacen referencia al mismo objeto, pero al usar dicho operador con dos operandos tipo string se prueba la igualdad del contenido de las cadenas y no su referencia. Sin embargo, con el resto de los operadores relacionales, como < o >= se comparan las referencias.
- Se pueden concatenar (unir) dos cadenas mediante el operador +.
- Las cadenas son inmutables, una vez creadas no se pueden modificar, solo se pueden copiar total o parcialmente.
- Las cadenas se pueden usar en las instrucciones switch.
Métodos comunes de control de cadenas | |
---|---|
Método | Descripción |
static string Copy(string str)
|
Devuelve una copia de str. |
int CompareTo(string str)
|
Devuelve menor que cero si la cadena que llama es menor que str, mayor que cero si la cadena que llama es mayor que str, y cero si las cadenas son iguales. |
int IndexOf(string str)
|
Busca en la cadena que llama la subcadena especificada por str.
Devuelve el índice de la primera coincidencia, o -1 en caso de error. |
int LastIndexOf(string str)
|
Busca en la cadena que llama la subcadena especificada por str. Devuelve el índice de la última coincidencia, o -1 en caso de error. |
string ToLower
|
Devuelve una versión en minúsculas de la cadena que llama. |
string ToUpper
|
Devuelve una versión en mayúsculas de la cadena que llama. |
Compiladores
En la actualidad existen los siguientes compiladores para el lenguaje C#:
- Microsoft.NET framework SDK incluye un compilador de C#, pero no un IDE.
- Microsoft Visual Studio .NET, IDE por excelencia de este lenguaje, versión 2002, 2003, 2005 Y 2008.
- #develop, es un IDE libre para C# bajo licencia LGPL, muy similar a Microsoft Visual C#.
- Mono, es una implementación GPL de todo el entorno .NET desarrollado por Novell. Como parte de esta implementación se incluye un compilador de C#.
- Delphi 2006, de Borland Software Corporation.
- dotGNU Portable.NET, de la Free Software Foundation.
Metas del diseño del lenguaje
El estandard ECMA lista las siguientes metas en el diseño para C#:
- C# debe ser un lenguaje simple, moderno, de propósito-general de programación orientada a objetos.
- El lenguaje, las implementaciones de aquí en delante, deben proveer soporte para principios de ingeniería de software tales como revisión estricta de los tipos de datos, revisión de límites de arrays, detección de intentos de usar variables no inicializadas, y recolección de basura automática.
- Se espera que el lenguaje sea usado para desarrollar componentes de software que se puedan usar en ambientes distribuidos.
- Portabilidad de código fuente es muy importante, tal como es portabilidad del programador, especialmente para programadores familiarizados con C y C++.
- Soporte para internacionalización es muy importante.
- Se espera que C# sea adecuado para escribir aplicaciones desde las más grandes y sofisticadas como sistemas operativos hasta las más pequeñas funciones.
- Aunque las aplicaciones en C# estén orientadas a ser económicas respecto a los requisitos de memoria y proceso, el lenguaje no fue hecho para competir directamente en velocidad o tamaño con C o lenguaje ensamblador.
Enlaces externos
- Mejoras de C#3.0
- Desarrollo de Software en C# Comunidad virtual para el intercambio de información en castellano sobre desarrollo de software en C# para profesionales practicantes, docentes y estudiantes.
- Baltie - C# IDE for children and young Baltie
- Devjoker - C# en español. Tutoriales y foros.
- Geeks.ms Blogs sobre desarrolladores en plataforma.Net y C#
- Wikilibros alberga un libro o manual sobre C sharp NET.
- Standard ECMA-334 - especificación del lenguaje C# en inglés
- Especificación del lenguaje C# - online, hyperlinked version en inglés.
- C# Online.NET - su enciclopedia libre de C# y.NET en inglés.
- C# Online.NET - su enciclopedia libre de C# y.NET en español.
- Kit de desarrollo de software (SDK) de Microsoft.NET Framework 2.0 (x86), (x64) e (IA64)
- Microsoft.NET
- Proyecto Mono
- Mono para la comunidad de habla hispana
- #develop
- Microsoft Visual C# Express Edition
- VBPrincipiantes
- ElBruno
- Borland Delphi
- Proyecto DotGNU
- Especificación del C#3.0
- C# School - inglés.
- Full C# Online book