Академический Документы
Профессиональный Документы
Культура Документы
Emplea un sistema de tipos unificado. Todos los tipos de datos (incluidos los
definidos por el usuario) siempre derivarán, aunque sea de manera implícita, de
una clase base común llamada System.Object, por lo que dispondrán de todos
los miembros definidos en ésta clase. Esto también es aplicable, lógicamente, a
los tipos de datos básicos.
C# incluye mecanismos que permiten asegurar que los accesos a tipos de datos
siempre se realicen correctamente:
Comentarios
Los comentarios tienen como finalidad ayudar a comprender el código fuente y están
destinados, por lo tanto, a los programadores. No tienen efecto sobre el código
ejecutable ya que su contenido es ignorado por el compilador (no se procesa). La
sintaxis de los comentarios en C# es idéntica a la de C++ y se distinguen dos tipos de
comentarios:
Ejemplos de comentarios
/*
En múltiples líneas, como se viene
haciendo desde "los tiempos de C"
*/
Palabras reservadas
abstract, as, base, bool, break, byte, case, catch, char, checked, class, con
st, continue, decimal, default, delegate, do, double, else, enum, event, exp
licit, extern, false, finally, fixed, float, for, foreach, goto, if, implici
t, in, int, interface, internal, is, lock, long, namespace, new, null, obje
ct, operator, out, override, params, private, protected, public, readonly,
ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, stru
ct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, u
short,using, virtual, void, volatile, while
Literales
Literales lógicos.
Existen dos valores literales lógicos: true y false. El tipo de un literal lógico
es bool.
Literales enteros.
Permiten escribir valores de los tipos enteros: int, uint, long y ulong. Los
literales enteros tienen dos formatos posibles: decimal y hexadecimal. Los
literales hexadecimales tienen el sufijo 0x.
Literales enteros
123 // int
0x7B // hexadecimal
123U // unsigned
123ul // unsigned long
123L // long
Literales reales.
Hay que tener en cuenta que, en un literal real, siempre son necesarios dígitos
decimales tras el punto decimal. Por ejemplo, 3.1F es un literal real, pero no
así 1.F.
Literales reales
Literales de caracteres.
\0 Null 0x0000
\a Alerta 0x0007
\b Retroceso 0x0008
Literales de caracteres
'A' // caracter sencillo
'\u0041' // caracter Unicode
'\x0041' // unsigned short hexadecimal
'\n' // caracter de escape: CR+LF
Literales de cadena.
Un literal típico de cadena consta de cero o más caracteres entre comillas dobles y
puede incluir secuencias de escape sencillas y secuencias de escape
hexadecimales y Unicode.
Literal null.
Los métodos básicos de la clase Console son WriteLine y ReadLine, junto con sus
variantes Write y Read:
La versión más simple de este método recibe un único argumento (una cadena)
cuyo valor es el que se muestra:
E/S simple
using System;
class PideNombre
{
static void Main(string[] args)
{
Console.Write ("Introduzca su nombre: ");
// 1
string nombre = Console.ReadLine();
// 2
Por ejemplo, en la figura siguiente mostramos una aplicación que responde mostrando
una ventana de mensaje (MessageBox) cuando se pincha sobre el botón
titulado Saludo. Basta con ejecutar este código cada vez que se pinche en dicho
botón:
Tipos de datos
Los tipos de datos ofrecidos por C# al programador forman parte de un sistema
unificado en el que todos los tipos de datos (incluidos los definidos por el usuario)
derivan, aunque sea de manera implícita, de la clase System.Object. Por herencia
dispondrán de todos los miembros definidos en ésta clase, en particular los útiles
métodos Equals(), GetHashCode(), GetType() y ToString() .
tipos valor
tipos referencia
Tipos valor
Los tipos básicos son tipos valor. Si una variable es de un tipo valor contiene
únicamente un valor del tipo del que se ha declarado.
Los tipos predefinidos de C# son tipos disponibles en la plataforma .NET y que, por
comodidad, en C# se emplean usando un alias. En la tabla siguiente enumeramos los
tipos simples detallando su nombre completo, su alias, una breve descripción, el
número de bytes que ocupan y el rango de valores.
Bytes con
System.Sbyte sbyte 1 -128 ... 127
signo
Enteros
System.Int16 short 2 -32.768 ... 32.767
cortos
-2.147.483.648 ...
System.Int32 int Enteros 4
2.147.483.647
-9.223.372.036.854.775.808
Enteros
System.Int64 long 8 ...
largos
9.223.372.036.854.775.807
Bytes (sin
System.Byte byte 1 0 ... 255
signo)
Enteros
System.Uint16 ushort cortos (sin 2 0 ... 65.535
signo)
Enteros
0 ...
System.Uint64 ulong largos (sin 8
18.446.744.073.709.551.615
signo)
Reales (15-
±5.0 x 10-324 ... ±1.7 x
System.Double double 16 8
10+308
decimales)
Reales (28-
±1.0 x 10-28 ... ±7.9 x
System.Decimal decimal 29 12
10+28
decimales)
Caracteres
System.Char char 2 Cualquier carácter Unicode
Unicode
Valores
System.Boolean bool 1 true ó false
lógicos
Tipos referencia
C# proporciona dos tipos referencia predefinidos: object y string. Todos los demás
tipos predefinidos son tipos valor.
El tipo object es el tipo base del cual derivan todos los tipos básicos predefinidos y
los creados por el usuario.
Los objetos de las clases creadas por el usuario son siempre de tipo referencia. El
operador new permite la creación de instancias de clases definidas por el
usuario. new es muy diferente en C# y en C++:
El tipo string es un tipo especial de tipo referencia. De hecho, parece más un tipo
valor ante la asignación. Observe el ejemplo:
string s1 = "Hola";
string s2 = s1;
En este punto s2 referencia al mismo objeto que s1. Sin embargo, cuando el valor
de s1 es modificado, por ejemplo con:
s1 = "Adios";
lo que ocurre es que se crea un nuevo objeto string referenciado por s1. De esta
forma, s1 contiene "Adios" mientras que s2 mantiene el valor "Hola". Esto es así
porque los objetos string son immutables, por lo que, para cambiar lo que
referencia una variable string debe crearse un nuevo objeto string.
Variables y constantes
Variables
Nombres de variables
Los nombres que pueden asignarse a las variables deben regirse por unas normas
básicas:
Finalmente, recordar que, como identificador que es, el nombre de una variable es
sensible a las mayúsculas y no pueden coincidir con una palabra reservada a no ser
que tenga el prefijo @, aunque no es una práctica recomendada.
Declaración de variables
Antes de usar una variable se debe declarar. La declaración de una variable indica
al compilador el nombre de la variable y su tipo. Una declaración permite que se pueda
reservar memoria para esa variable y restringir el espacio (cantidad de memoria) que
requiere, los valores que pueden asignarsele y las operaciones en las que puede
intervenir.
La sintaxis de una declaración es sencilla: tan sólo hay que especificar el tipo de la
variable y el nombre que se le asocia. La declaración debe concluir con el carácter
punto y coma. Por ejemplo, si vamos a emplear una variable para guardar en ella el
valor del área de un círculo debemos:
float Area;
Cuando se van a declarar múltiples variables del mismo tipo no es necesario que cada
declaración se haga por separado, pueden agruparse en la misma línea compartiendo
el tipo. Por ejemplo, las declaraciones:
float Radio;
float Area;
Acceso a variables
Una variable se usa para asignarle un valor (acceso de escritura) o para utilizar el valor
almacenado (acceso de lectura).
Una vez declarada una variable debe recibir algún valor (es su misión, después de
todo). Este valor lo puede recibir de algún dispositivo (flujo de entrada) o como
resultado de evaluar una expresión. La manera más simple de proporcionar un valor a
una variable es emplear la instrucción de asignación:
Radio = 10.0F;
La manera más simple de leer el valor de una variable es emplearla como parte de una
expresión, por ejemplo, en la parte derecha de una instrucción de asignación:
Otra manera de acceder al valor de una variable para lectura es emplearla como el
argumento de una instrucción de escritura WriteLine. Por ejemplo,
Console.WriteLine(Area);
mostrará en la consola el valor de la variable Area.
using System;
class Area1
{
static void Main(string[] args)
{
float Radio = 10.0F;
float Area = 2 * 3.1416F * Radio * Radio;
Console.WriteLine(Area);
Console.ReadLine();
}
}
Como puede parecer evidente, emplear una variable que no ha sido declarada produce
un error en tiempo de compilación. En C#, además, hay que asignarle un valor antes
de utilizarla. Si no se hace se genera un error en tiempo de compilación ya que esta
comprobación (igual que ocurre en Java) se efectúa por el compilador.
void f()
{
int i;
Console.WriteLine(i); // Error: uso de la variable
local no asignada 'i'
}
Constantes
Una constante se define de manera parecida a una variable: modeliza una zona de
memoria que puede almacenar un valor de un tipo determinado. La diferencia reside
en que esa zona de memoria (su contenido) no puede modificarse en la ejecución del
programa. El valor de la constante se asigna en la declaración.
Solo se puede consultar el valor de una constante, nunca se debe intentar modificarlo
porque se produciría un error en tiempo de compilación. Por ejemplo, la siguiente
instrucción:
using System;
class Area2
{
static void Main(string[] args)
{
const float PI = 3.1416F;
float Radio = 10.0F;
float Area = 2 * PI * Radio * Radio;
Console.WriteLine(Area);
Console.ReadLine();
}
}
Ámbito de variables y constantes
El ámbito (del inglés scope) de una variable y/o constante indica en qué partes del
código es lícito su uso.
En el ámbito de una variable no puede declararse otra variable con el mismo nombre
(aunque sea en un bloque interno, algo que si está permitido en C++):
Operadores y expresiones
Un operador está formado por uno o más caracteres y permite realizar una
determinada operación entre uno o más datos y produce un resultado. Es una manera
simbólica de expresar una operación sobre unos operandos.
Categorías Operadores
+ - * /
Aritméticos
%
& | ^ ! ~ &&
Lógicos (booleanos y bit a bit)
||
Concatenación de cadenas +
Incremento y decremento ++ --
Desplazamiento << >>
Relacionales == != < > <= >=
= += -= *= /=
Asignación %= &=
|= ^= <<= >>=
Acceso a miembros .
Acceso por índices []
Conversión de tipos explícita ()
Conditional ? :
Creación de objetos new
Información de tipos as is sizeof typeof
Control de excepciones de
checked unchecked
desbordamiento
Direccionamiento indirecto y
* -> [] &
dirección
Son operadores binarios y se colocan entre los argumentos sobre los que se
aplican, proporcionando un resultado numérico (Por ejemplo, 7+3.5, 66 % 4).
Los operadores binarios son: & (operación Y lógica entre argumentos lógicos u
operación Y bit a bit entre operandos numéricos), |(operación O, lógica ó bit a bit,
dependiendo del tipo de los argumentos) , ^ (O exclusivo, lógico ó bit a bit), && (Y
lógico, que evalúa el segundo operando solo cuando es necesario) y || (O lógico,
que evalúa el segundo operando solo cuando es necesario).
El incremento prefijo hace que el resultado sea el valor del operando después de
haber sido incrementado y el postfijo hace que el resultado sea valor del operando
antes de haber sido incrementado.
Los operandos deben ser del mismo tipo o el operando de la derecha se debe
poder convertir implícitamente al tipo del operando de la izquierda).
a += 22;
equivale a
a = a + 22;
o sea, primero se calcula la expresión a+22 y posteriormente,ese valor se
almacena en a.