2tutorial CSharp PDF
2tutorial CSharp PDF
2tutorial CSharp PDF
El Lenguaje C#
El último en una línea de evolución de los lenguajes derivados de C, que
incluye C++ y Java
Creada con .NET en mente, por tanto es el lenguaje ideal para el desarrollo en
.NET
C# introduce varias mejoras sobre C++ en las áreas de seguridad de datos,
versionamiento, eventos y recolección de basura
C# provee acceso a SO y COM APIs y soporta el modo unsafe que permite el
uso de punteros como en C
Más simple que C++ pero tan poderoso y flexible
Totalmente orientado a objetos
Seguridad en tipos
Polimorfismo
Sobrecarga de operadores y métodos
Herencia
Ventajas de C#
Seguridad de tipos
Orientado a Objetos
Objetos <- Tipos básicos de datos
int Counter = 14;
Console.WriteLine( Counter.ToString() );
Administración automática de memoria
Sintaxis simplificada: operadores de referencia y namespaces:
., ->, :: sustituidos por ->
XML: ¿Comentarios? ¡Documentación!
COMponentes y componentes .NET
Integración con otros lenguajes .NET
Independencia de plataforma
.NET
Liberación de la especificación
42 42
En Boxing un valor se refiere a la conversión
implícita de cualquier tipo de valor al tipo
objeto. Cuando un tipo de valor es boxed se
asigna espacio a una instancia de objeto y
42 el valor del value type es copiado al nuevo
objeto.
Boxed: Unboxed:
Referencia Copia
Boxing y Unboxing
using System;
class App{
public static void Main(){
int iEdad = 33;
object oNumero = iEdad; //Box
int iNumero = (int)oNumero; //Unbox
//cast necesario porque oNumero podría contener cualquier
tipo de objeto } }
Al asignar el valor de la variable entera iEdad a una variable objeto se realiza
internamente una operación boxing, donde el valor de la variable iEdad es copiado
al objeto oNumero, entonces las variables entera y objeto existen en la pila pero los
valores de los objetos residen en el área o espacio asignado, lo que implica que los
valores son independientes y no hay una liga entre ellos.
Unboxing es un mecanismo de una operación explícita, por lo que es necesario
indicar al compilador que tipo de valor deseamos extraer de un objeto, al realizar la
operación Unboxing C# checa que el value type que se requiere este almacenado en
la instancia del objeto, si la verificación es exitosa el valor es Unboxing.
Constantes
C# provee el modificador const que se puede usar para crear constantes de
programas:
Arreglos rectangulares
// Declaración de una matriz de 2x3
int[,] squareArray = new int[2,3];
//Declaración y asignación de una matriz 2x3
int[,] squareArray = {{1, 2, 3}, {4, 5, 6}};
//Algunos métodos inherentes de la clase: System.Array
squareArray.GetLowerBound(1); // Nivel inferior
squareArray.GetUpperBound(1); // Nivel superior
squareArray.GetLength(0); // Tamaño del arreglo
Expresiones y Operadores I
Las expresiones en C# son muy similares a las de C y C++
Operadores aritméticos:
+ , Suma unaria , +a
- , Resta unaria, -a
++, Incremento, ++a o a++
--, Decremento, --a o a--
+, Suma, a+b
-, Resta, a-b
*, Multiplicación, a*b
/, División, a/b
%, Resto, a%b
Expresiones y Operadores II
Operadores relacionales:
== , Igualdad , a==b
!= , Inigualdad, a!=b
Los programadores de Visual Basic deben notar que se usa ‘==‘ en vez de ‘=‘
para igualdad, ‘!=‘ para desigualdad en vez de ‘<>’ e ‘=‘ para asignación
Expresiones y Operadores III
Operadores relacionales:
! , Negación , !a
& , And binario, a&b
|, Or binario, a|b
^, Or exclusivo, a^b
~, Negación binaria, ~a
No permitido para
Operadores de asignación
Ejemplos:
Public static Total operator +(int cantidad, Total t)
{
t.total += cantidad;
}
int i, j;
// un sentencia simple
i=1;
// un bloque de sentencias
{
j=2;
i=i+j;
}
Sentencias II
if, sirve para saltar en base a una condición:
int i=1;
While (i<=5)
System.Console.WriteLine(i++);
Sentencias IV
for, se usa cuando el número de repeticiones se conoce a priori
for (int i=1; i<=5; i++)
System.Console.WriteLine(i); // Visualiza digitos 1 a 5
La primera expresión es de inicialización, declara un entero
La segunda la condición del bucle
Métodos
Propiedades
La solución a esto son métodos virtuales a través de las palabras claves virtual
(a usarse en el método de la clase padre) y override (a usarse en el método de
la clase hijo)
Métodos virtuales II
using System;
class Persona {
protected string nombre, apellido1;
public Persona(string nombre, string apellido1) {
this.nombre = nombre;
this.apellido1 = apellido1;
}
public virtual void Saludar() {
Console.WriteLine("¡Hola " + this.nombre + " " +
this.apellido1 + "!");
}
}
Métodos virtuales III
class Hombre: Persona {
public Hombre(string nombre, string apellido1): base(nombre,
apellido1) {}
public override void Saludar() {
Console.WriteLine("¡Hola " + this.apellido1 + "!");
}
}
class Test {
public static void Main() {
Persona p1 = new Hombre("Matias", "Garcia");
p1.Saludar(); // Visualizar ¡Hola Garcia!
Persona p2 = new Persona("Juan", "Perez");
p2.Saludar(); // Visualizar ¡Hola Juan Perez!
}
}
Clases abstractas I
Supongamos que estamos interesados en modelar hombres y mujeres, pero no
personas perse No queremos permitir la creación de objetos Persona
directamente, pero queremos permitir la creación de objetos Hombre y Mujer
directamente.
Usamos abstract delante de Persona para evitar que esta clase se pueda
instanciar
Usamos abstract en el método Saludar de Persona para indicar que las clases
que heredan deben sobreescribirlo
Clases abstractas II
using System;
abstract class Persona {
protected string nombre, apellido1;
public Persona(string nombre, string apellido1) {
this.nombre = nombre;
this.apellido1 = apellido1;
}
abstract public void Saludar();
}
Clases abstractas III
class Hombre: Persona {
public Hombre(string nombre, string apellido1): base(nombre,
apellido1) {}
public override void Saludar() {
Console.WriteLine("¡Hola Señor " + this.apellido1 + "!");
}
}
class Mujer: Persona {
public Mujer(string nombre, string apellido1): base(nombre,
apellido1) {}
public override void Saludar() {
Console.WriteLine("¡Hola Señorita " + this.apellido1 + "!");
}
}
Clases abstractas IV
class Test {
public static void Main() {
Hombre h = new Hombre("Matias", "Garcia");
h.Saludar(); // Visualizar ¡Hola Señor Garcia!
Mujer m = new Mujer("Angie", "Citterio");
m.Saludar(); // Visualizar ¡Hola Señorita Artaza!
}
}