Lenguaje C#
Lenguaje C#
Lenguaje C#
Qu no es .NET?
El asesino de Java
El asesino de Linux
El asesino de Windows
MS apropindose de Internet
Un complot para dominar el mundo
Qu es .NET?
Una plataforma software
Motivaciones
(Programacin)
Motivado por el grado de complejidad que estaba tomando
la programacin Windows y el propio S.O:
Interfaces de los APIs para los diferentes lenguajes
Multitud de servicios duplicados
Pocas posibilidades de reutilizacin del cdigo
MFC/ATL
Windows
API
Visual Basic
.NET
Framework
ASP
1980s
1990s
2000s
Motivaciones
(Despliegue)
Plataforma.NET
C++
C#
JScript
ADO.NET y XML
Biblioteca de Clases Bsicas
Common Language Runtime
Sistema Operativo
Visual Studio.NET
C#
J#
CLS y CTS
ASP.NET
Windows
Forms
WPF
WCF
WF
WCS
Algo de OO
Programacin Orientada a Objetos (POO)
- Clases
- Generador de objetos. Especifica la estructura,
propiedades y mtodos de los objetos.
- Objetos
- Una instancia de una clase.
- Herencia
- Relaciones que se pueden establecer entre las clases.
- Hijos y padres.
Algo de OO (2)
Clase A
Clase B
Clase C
Clase D
Persona
Pedro
Javi
Feligres
Catequista
Juanma
C#, Cixarp,
C Armoadiya?
El ltimo en una lnea de evolucin lgica de los
lenguajes derivados de C, como C++ y Java
Usado por Microsoft para desarrollar la mayora del
cdigo de .NET. Por tanto es el lenguaje ideal para el
desarrollo en .NET.
Ms simple que C++ pero tan poderoso y flexible
- C# C++ + Java;
- Facilitar migracin.
- Facilitar aprendizaje.
Caractersticas de C#
Es un lenguaje sencillo y de alto nivel
Es muy muy parecido a Java
Estructura de un
programa en C#
using System;
using System.Collections.Generic;
using System.Text;
namespace MiPrograma
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Hola a todos!!);
}
}
}
Mtodo principal
(obligatorio)
Variables
TIPOS DE VARIABLE
Tipos primitivos (entero, carcter,
lgico, etc)
Tipos enumerados
Estructuras
Clases
Interfaces
Arrays
Delegados
Variables (2)
Por valor:
- Continen el dato
- No pueden ser nulas
Por referencia:
- Contienen la referencia
- Pueden ser nulas
- Se crean con new (Excepto los strings)
i
s
123
int i = 123;
string s = Hola cachocarne";
Hola cachocarne"
Variables (3)
Predefinidos
-
Referencia
Con signo
Sin signo
Caracter char
Flotantes
Lgico
object, string
sbyte, short, int, long
byte, ushort, uint, ulong
float, double, decimal
bool
Variables (4)
Las variables por valor pueden declararse e
iniciarse:
bool bln = true;
byte byt1 = 22;
char ch1=x, ch2=\u0066; // Unicode para a
decimal dec1 = 1.23M;
double dbl1=1.23, dbl2=1.23D;
short sh = 22;
int i = 22;
long lng1 =22, lng2 =22L; // L long
sbyte sb = 22;
float f=1.23F;
ushort us1=22;
uint ui1=22, ui2=22U; // U unsigned
ulong ul1 =22, ul2=22U, ul3=22L, ul4=2UL;
Variables (5)
Los valores por referencia son creados con la palabra
clave new:
object o = new System.Object();
Variables:
Variables:
ColorFeo c;
c = ColorFeo.fucsia;
Variables:
Estructuras (1)
Una estructura es un tipo de dato similar a
una clase, pero con dos diferencias
principalmente:
- Se tratan como variables por valor
- Son ms rpidas y ocupan menos memoria y,
como consecuencia de esto, no tienen herencia
Variables:
Estructuras (2)
Ejemplo:
public struct Moto
{
public string marca;
public string modelo;
Arrays (1)
Un array (unidimensional) o tabla es un tipo especial de
variable que es capaz de almacenar de manera ordenada
1 ms datos de un determinado tipo
El valor de un array es una referencia, por lo que se
comporta como un objeto ms
Tienen algunos mtodos y propiedades tiles, como la
propiedad Length, que obtiene el nmero de elementos
que tiene el array
Un array se crea as:
<tipo>[ ] <nombreVariable> = new <tipo> [ <numeroElementos> ]
Arrays (2)
Ejemplos:
Tabla de enteros:
Tabla de Personas:
dni[0]
dni[1]
dni[2]
dni[3]
dni[4]
dni[5]
=
=
=
=
=
=
2;
4;
0;
2;
1;
3;
alumnos[1].imprimirPorPantalla();
Arrays (3)
Los arrays tambin pueden tener ms de 1
dimensin
Ejemplos:
- Array de lgicos de 2 dimensiones:
bool[,] aprobados = new bool[5, 100];
aprobados[2, 54] = true;
Constantes (1)
Una constante es una variable cuyo valor no
puede cambiar durante la ejecucin del programa
El compilador sustituye en el cdigo generado
todas las referencias a las constantes por sus
respectivos valores, por lo que el cdigo generado
ser ms eficiente, ya que no incluir el acceso y
clculo de sus valores
Hay que darles un valor inicial al declararlas:
const <tipoConstante> <nombreConstante> = <valor>;
Constantes (2)
Ejemplo de constantes correctas:
const int a = 123;
const int b = 24;
const int c = b + 125;
Operadores (1)
- De asignacin:
a = 4;
a = b = 2;
- Aritmticos:
c = 4 + 3;
- Lgicos:
c = a && b;
d = !e;
Asignacin ( = )
Suma ( + )
Resta ( - )
Producto ( * )
Divisin ( / )
Mdulo ( % )
Asignacin y
aritmeticos
+=
-=
*=
/=
%=
Operadores (2)
- Relacionales:
a = (b == c);
d = (e > f);
- A Nivel de Bits
Igualdad ( == )
Desigualdad ( != )
Mayor que ( > )
Menor que ( < )
Mayor o igual que ( >= )
Menor o igual que ( <= )
Sentencias (1)
Instruccin IF:
Permite ejecutar ciertas instrucciones slo si se cumple una
determinada condicin
if (<condicin>)
{
<instrucciones>
}
else
{
<instrucciones>
}
Sentencias (2)
Ejemplos:
public bool esUnaNotaCorrecta(int nota)
{
bool correcta;
if (nota >= 0 || nota <= 10)
{
correcta = true;
}
else
{
correcta = false;
}
return correcta;
}
Sentencias (3)
public void saludo(int numeroSaludo)
{
if (numeroSaludo == 1)
{
Console.WriteLine("Hola, esto es el saludo n 1");
}
else if (numeroSaludo == 2)
{
Console.WriteLine("Hola, esto es el saludo n 2");
}
else
{
Console.WriteLine("Saludo incorrecto");
}
}
Sentencias (4)
Instruccin SWITCH
Permite ejecutar unos u otros bloques de instrucciones segn el valor de una cierta expresin
Ejemplo: (Dada una variable i de tipo entero)
switch (i)
{
case 1:
Console.WriteLine(Primer caso);
break;
case 2:
Console.WriteLine(Segundo caso);
break;
default:
Console.WriteLine(Cuaquier otro caso);
break;
}
Sentencias (5)
Instruccin FOR:
Sirve para repetir un una serie de instrucciones un determinado
nmero de veces.
Esquema:
Sentencias (6)
Ejemplo:
for (int i = 0; i<10; i++)
{
string texto = Esta es la iteracin n + i;
Console.WriteLine(texto);
}
Sentencias (7)
Instruccin WHILE:
Sirve repetir una serie de instrucciones mientras se cumpla una condicin
Esquema:
while (<condicin>)
{
<instrucciones>
}
Sentencias (8)
Ejemplo:
int i = 0;
while (i<10)
{
string texto = Esta es la iteracin n + i;
Console.WriteLine(texto);
i++;
}
Sentencias (9)
Instruccin DO WHILE:
Sirve repetir una serie de instrucciones mientras se cumpla una condicin
y al menos se ejecutan 1 vez.
Esquema:
do
{
<instrucciones>
}
while (<condicin>)
Sentencias (10)
Ejemplo:
int i = 0;
do
{
string texto = Esta es la iteracin n + i;
Console.WriteLine(texto);
i++;
}
while (i<10)
Sentencias (11)
Instruccin FOREACH
- Es una variante de la instruccin for pensada para arrays y
otras colecciones (siempre que todos sus elementos sean del
mismo tipo)
- Sirve para recorrer arrays, como los iteradores
Esquema:
foreach (<tipoElemento> <elemento> in <coleccin>)
{
<instrucciones>
Sentencias (12)
Ejemplo:
Clases (1)
Un objeto es un conjunto de datos (variables) y
de mtodos (funciones) que permiten manipular
dichos datos
Una clase es la definicin de las caractersticas
concretas de un determinado tipo de objetos
Una clase es como una estructura del lenguaje C, pero que, adems
de contener subvariables, contiene funciones.
Clases (2)
Estructura de una clase:
<modificador> class <nombreClase>
{
Atributos
Constructor/es
Mtodos
}
Declaracin de un objeto:
<nombreClase> <nombreVariable>;
Asignacin/creacin de un objeto:
<nombreVariable> = new <nombreClase>();
Clases (3)
Ejemplo:
Persona p;
p = new Persona(Enrique, 21);
p.edad = 20;
p.imprimirPorPantalla();
nombre
Enrique
wf35gd
edad
dgdga
21
20
wf35gd
Clases:
Propiedades (1)
Una propiedad es una mezcla entre el concepto
de atributo (variable) y el concepto de mtodo
(funcin).
Externamente es accedida como si de un atributo
normal se tratase, pero internamente es posible
asociar cdigo a ejecutar en cada asignacin o
lectura de su valor.
- ste cdigo puede usarse para comprobar que no se
asignen valores incorrectos, etc.
Clases:
Propiedades (2)
Ejemplo:
Persona a = new Persona();
public class Persona
{
public string nombre;
private int edad;
public int Edad
{
get
{
return edad;
}
set
{
if (edad < 0 || edad > 120) edad = 0;
else edad = value;
}
}
}
a.nombre = Fran;
Se permite
calquier valor
a.Edad = 22;
Valor permitido
a.Edad = 121;
Valor prohibido
Clases:
Propiedades (3)
public class Person
{
private int age;
Propiedad
public int Age {
get { return age; }
set { age = value;
Console.WriteLine(age);
}
}
}
C#
En vez de
Otro
Clases parciales
// Demo.Part1.cs
using System;
public partial class Demo
{
public Demo()
{
Console.Write( "P1" );
}
}
// Demo.Part3.cs
// Error!
public class Demo
{
// Error!
private int i;
// OK
private int j;
// Demo.Part2.cs
public partial class Demo
{
// Error!
"P3" );
}
private int i;
Console.Write(
Clases y ms
Un miembro static puede ser accedido sin crear una
instancia de una clase (se suelen usar para guardar valores
globales)
class Persona {
public static int MinimumAge = 18;
}
int age = Persona.MinimumAge; // accedemos a MinimumAge usando nombre
clase
string s;
//
}
Esquema:
<modificador> class <nombreClaseHija>:<nombreClasePadre>
{
<miembrosHija>
}
public:
Visible fuera de la clase
private :
Visible slo dentro de la clase
protected: Visible dentro de la clase y de sus clases
hija
this.apellido1 = apellido1;
}
abstract public void Saludar();
}
Clases ms usuales
String: Manejo de Cadenas
StringBuilder: Modificacion de Cadenas
Math: funciones Matematicas
Random: Nmeros aleatorios
DateTime: Fecha y Hora
FileStream, StreamWriter, StreamReader:
Ficheros
File, Directory y Path: Sistema de ficheros
Interfaces (1)
Una interfaz especifica un contrato que una clase (o una
estructura) debe cumplir. Fijan el comportamiento
Interfaces (2)
Estructura de una interfaz:
<modificador> interface <nombreInterfaz>
{
propiedad1;
propiedad2;
propiedadN;
mtodo1;
mtodo2;
mtodoN;
}
Interfaces (3)
Ejemplo:
Interfaces (4)
Podemos crear un objeto tipo Clase o tipo Interfaz:
Tipo Clase:
Renault miCoche = new Renault();
Tipo Interfaz:
int i;
Increment(ref i); // i == 3
Metros SumaMetros=m-c;
Modificadores
de acceso
Los modificadores de acceso controlan la visibilidad de
los miembros de una clase
- private, slo cdigo dentro de la misma clase contenedora
tiene acceso a un miembro privado. Es el modo de acceso por
defecto.
- public , visible a todos los usuarios de una clase
- protected, miembros accesibles tanto por dentro de la clase
como en clases derivadas
- internal, miembros accesibles slo dentro de un assembly
- protected internal, permite acceso protected e internal
Excepciones (1)
Una excepcin es un objeto de alguna clase derivada de System.Exception que se
genera cuando se produce algn error en tiempo de ejecucin y que contiene
informacin sobre el mismo.
El cdigo donde pueda haber errores se trata con el bloque trycatch
Hay dos tipos de excepciones:
-
A diferencia de Java, no hace falta propagar las excepciones, se pueden tratar tanto en
la funcin que se produce como en otra funcin que a su vez llama a la funcin en la
que se produce
Excepciones (2)
Ejemplo:
Excepciones (3)
ArgumentNullException una referencia nula es
pasada como argumento
ArgumentOutOfRangeException nos hemos salido
de rango, e.j. entero demasiado grande
DividedByZeroException
IndexOutOfRangeException se usa un ndice
invlidado del array
InvalidCastException
NullReferenceException se intenta invocar un
mtodo en un objeto que es null
OutOfMemoryException
Excepciones (4)
using System;
class Persona {
string nombre, apellido1;
int edad;
public Persona(string nombre, string apellido1, int
edad) {
this.nombre = nombre;
this.apellido1 = apellido1;
this.edad = edad;
if (edad < 18) // La edad debe ser mayor que 18 sino
excepcin
throw new Exception("ERROR: Persona debajo edad
legal");
this.edad = edad;
}
}
Excepciones (5)
class Test {
public static void Main() {
try {
Persona p = new Persona("Diego, "Ipia", 12);
} catch (Exception e) { // capturar excepcin lanzada
Console.WriteLine(e.Message);
}
}
Se puede incluir un bloque finally tambin, para asegurarnos que
recursos abiertos son cerrados:
try {
...
} catch {
...
} finally {
...
}
// Devuelve 2
Colecciones (1)
La plataforma .NET tiene un espacio de
nombres dedicado a estructuras de datos
como pilas, arrays dinmicos, colas...
System.Collections dispone de una
serie de interfaces que implementan todas
estas colecciones.
Colecciones (2)
Entre otras estructuras podemos encontrar:
-
C# 2.0:
Colecciones Genricas
Similares a los Templates de C++
-
- Stack: Pilas
List<Persona> personas = new List<Persona>();
personas.Add(new Persona("Jos", "Garca", new DateTime(1940, 12, 2)));
personas.Add(new Persona("Pedro", "Lpez", new DateTime(1992, 2, 22)));
personas.Add(new Persona("Antonio", "Prez", new DateTime(1976, 6, 21)));
C# 3.x:
Tipos implcitos
Tipos de datos que el compilador se encargar de
averiguar de que tipo es en tiempo de compilacin.
Utilizamos var
var i = 10;
var d = 10.5;
var s = "Hola, Mundo";
Console.WriteLine("El tipo de i es: {0} ({1})",
Console.WriteLine("El tipo de d es: {0} ({1})",
Console.WriteLine("El tipo de s es: {0} ({1})",
Console.WriteLine();
var n = i * d;
Console.WriteLine("El tipo de n es: {0} ({1})",
var j = i * 3; var k = s + " (el tpico)";
Console.WriteLine("El tipo de k es: {0} ({1})",
var variable = club .NET";
i.GetType().Name, i);
d.GetType().Name, d);
s.GetType().Name, s);
n.GetType().Name, n);
k.GetType().Name, k);
C# 3.x:
Tipos implcitos
C# 3.x:
Expresiones Lambda
Una extensin de los mtodos annimos, que ofrecen una sintaxis
ms concisa y funcional para expresarlos.
La sintaxis de una expresin lambda consta de una lista de variablesparmetros, seguida del smbolo de implicacin (aplicacin de funcin)
=>, que es seguido a su vez de la expresin o bloque de sentencias
que implementa la funcionalidad deseada.
C# 3.x:
Expresiones Lambda
Func<int, int> cuadrado = x => x * x;
// ms ejemplos
static Func<double, double, double> hipotenusa =
(x, y) => Math.Sqrt(x * x + y * y);
static Func<int, int, bool> esDivisiblePor =
(int a, int b) => a % b == 0;
static Func<int, bool> esPrimo =
x => {
for (int i = 2; i <= x / 2; i++)
if (esDivisiblePor(x, i))
return false;
return true;
};
static void Main(string[] args)
{
int n = 19;
if (esPrimo(n)) Console.WriteLine(n + " es primo");
Console.ReadLine();
}
C# 3.x:
Comentarios
string nombre = Juan; // Comentario de una sola lnea
/* Comentario con mas
de una lnea*/
/// <summary>
/// Documentacin XML que puede ser consumida por otras
/// herramientas para mostrar ayuda dinmica o generar
/// documentacin en varios formatos
/// </summary>
public class Matematica {
/// <summary>
/// Calcula la suma de dos nmeros enteros
/// </summary>
/// <param name="x">El primer operando de la suma</param>
/// <param name="y">El segundo operando de la suma</param>
/// <returns> La suma entera de ambos operandos</returns>
public int Sumar (int x, int y) {return x + y;}
}
Regiones de Cdigo
Estructura tu codigo. Ms legilibilidad
#region
public string PuntoYFinal {
get {
return(Gracias);
}
}
#endregion
Y an hay ms
Ficheros y Flujos de datos
Acceso a bases de datos
Componentes grficos
Recursos
http://msdn2.microsoft.com/eses/library/kx37x362(VS.80).aspx
http://recursos.dotnetclubs.com/granada
http://msdn.microsoft.com/msdnmag/issues/
07/06/CSharp30/default.aspx?loc=es
http://www.boomware.pe/blog/