Lenguaje C#
Lenguaje C#
Lenguaje C#
¿Qué no es .NET?
El asesino de Java
El asesino de Linux
El asesino de Windows
MS apropiándose de Internet
Un complot para dominar el mundo
¿Qué es .NET?
Una plataforma software
MFC/ATL
Windows .NET
Visual Basic
API Framework
ASP
Visual Studio.NET
ASP.NET
Windows
Web Forms Web Services
Forms
Mobile Internet Toolkit
ADO.NET y XML
Sistema Operativo
NET Framework (3.x)
2.0 .Framework 2.0
VB C# J# …
3.0 Framework 3.0
CLS y CTS
- Clases
- Generador de objetos. Especifica la estructura,
propiedades y métodos 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
Persona
Feligres Catequista
Pedro
Javi Juanma
¿C#, Cixarp,
C Armoadiya…?
El último en una línea de evolución lógica de los
lenguajes derivados de C, como C++ y Java
Usado por Microsoft para desarrollar la mayoría del
código de .NET. Por tanto es el lenguaje ideal para el
desarrollo en .NET.
Más simple que C++ pero tan poderoso y flexible
- C# ≈ “C++” + “Java”;
- Facilitar migración.
- Facilitar aprendizaje.
Características de C#
Es un lenguaje sencillo y de alto nivel
using System;
using System.Collections.Generic; Librerías (namespaces) usadas
using System.Text;
namespace MiPrograma
{
public class Program
{
public static void Main(string[] args) Método principal
{ (obligatorio)
Console.WriteLine(“Hola a todos!!”);
}
}
}
Variables
TIPOS DE VARIABLE
• Tipos primitivos (entero, carácter,
lógico, etc)
• Clases
• Interfaces
Variables tratadas por referencia
• Arrays
(contienen una referencia
• Delegados
al valor)
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)
int i = 123;
i 123 string s = “Hola cachocarne";
s “Hola cachocarne"
Variables (3)
Predefinidos
- Referencia object, string
- Con signo sbyte, short, int, long
- Sin signo byte, ushort, uint, ulong
- Caracter char
- Flotantes float, double, decimal
- Lógico bool
Son como un alias a los tipos definidos en system.
int == System.Int32
Casting: float e = (float) f;
String -> Tipo: int e = int.Parse(“234”);
Tipo ->String: string s = e.ToString();
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();
Strings se pueden inicializar directamente:
string s = "Hola"; // usan caracteres Unicode de 2
bytes
C# soporta secuencias de escape como en C:
string s1 = "Hola\n"; // salto de línea
string s2 = "Hola\tque\ttal"; // tabulador
Como las sentencias de escape comienzan con ‘\’, para
escribir este carácter hay que doblarlo, o usar ‘@’:
string s3 = "c:\\WINNT";
string s4 = @"C:\WINNT";
Variables:
Tipos enumerados (1)
Un enumerado es un tipo de variable cuyos valores
posibles que puede tomar son especificados por nosotros
<nombreTipoEnumerado> <nombreVariable>;
<nombreVariable> = <nombreTipoEnumerado>.valor;
Variables:
Tipos enumerados (2)
Ejemplo:
int x = 123;
const int y = x + 123; ERROR: x no tiene porqué tener
valor constante (aunque aquí
lo tenga)
Operadores (1)
- De asignación: • Asignación ( = )
a = 4; Asignación y
a = b = 2; aritmeticos
• Suma ( + )
+=
• Resta ( - )
-=
• Producto ( * )
- Aritméticos: • División ( / )
*=
/=
c = 4 + 3; • Módulo ( % )
%=
if (<condición>)
{
<instrucciones>
}
else
{
<instrucciones>
}
Sentencias (2)
Ejemplos:
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)
Instrucción SWITCH
Permite ejecutar unos u otros bloques de instrucciones según el valor de una cierta expresión
switch (i)
{
case 1: Se puede usar break
Console.WriteLine(“Primer caso”); o goto (para salto de línea)
break; aunque es obligatorio usar
case 2: Uno de ellos.
Console.WriteLine(“Segundo caso”);
break;
default:
Console.WriteLine(“Cuaquier otro caso”);
break;
}
Sentencias (5)
Instrucción FOR:
Sirve para repetir un una serie de instrucciones un determinado
número de veces.
Esquema:
Esquema:
while (<condición>)
{
<instrucciones>
}
Sentencias (8)
Ejemplo:
int i = 0;
while (i<10)
{
string texto = “Esta es la iteración nº “ + i;
Console.WriteLine(texto);
i++;
}
Sentencias (9)
Instrucción DO WHILE:
Esquema:
do
{
<instrucciones>
}
while (<condición>)
Sentencias (10)
Ejemplo:
int i = 0;
do
{
string texto = “Esta es la iteración nº “ + i;
Console.WriteLine(texto);
i++;
}
while (i<10)
Sentencias (11)
Instrucción FOREACH
- Es una variante de la instrucción for pensada para arrays y
otras colecciones (siempre que todos sus elementos sean del
mismo tipo)
- Sirve para recorrer arrays, como los iteradores
Esquema:
equipos[0] = "Barcelona";
equipos[1] = "Sevilla";
equipos[2] = "Real Madrid";
equipos[3] = "Valencia";
En cada iteración, eq vale lo que
Valga el elemento correspondiente
foreach(string eq in equipos) Del array (siempre empezando por
{ El primer elemento, el 0)
Console.WriteLine(eq);
}
Clases (1)
Una clase es como una estructura del lenguaje C, pero que, además
de contener subvariables, contiene funciones.
Clases (2)
• Un atributo es una variable de
cualquier tipo que estará contenida
Estructura de una clase: dentro de cada objeto que se cree
de la clase en cuestión (en cada objeto
tendrá un valor distinto)
<modificador> class <nombreClase>
{ • Un método es una función que permite
Atributos modificar los atributos del objeto
desde el que se llama
Constructor/es
Métodos • Un constructor es un método o función
} que se ejecuta automáticamente al crear
una variable de la clase en cuestión. Se puede
omitir (dando lugar al constructor por defecto),
Declaración de un objeto: aunque suele utilizarse para dar valores
iniciales a los atributos.
<nombreClase> <nombreVariable>;
Puede haber más de 1, pero sólo se ejecutará
uno de ellos, escogiendo cuál se ejecuta al
crear el objeto
Asignación/creación de un objeto:
El objeto se crea con el operador
<nombreVariable> = new <nombreClase>(); new seguido de una llamada al
constructor que elijamos
Clases (3)
Persona p;
Ejemplo:
p = new Persona(“Enrique”, 21);
wf35gd
Clases:
Propiedades (1)
Una propiedad es una mezcla entre el concepto
de atributo (variable) y el concepto de método
(función).
En vez de
Otro
Person p = new Person();
p.setAge(27);
p.setAge(p.getAge() + 1);
Clases parciales // Demo.Part3.cs
// Demo.Part1.cs // Error!
public class Demo
using System;
public partial class Demo {
{
// Error!
public Demo()
{ private int i;
Console.Write( "P1" );
}
} // OK
private int j;
// Demo.Part2.cs
public void Test()
public partial class Demo
{ // Error! Console.Write(
{ "P3" ); }
private int i; }
}
Clases y más…
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
Esquema:
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 (3)
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 (4)
class Test {
public static void Main() {
Hombre h = new Hombre("Diego", "Ipiña");
h.Saludar(); // Visualizar ¡Hola Señor Ipiña!
Mujer m = new Mujer("Usue", "Artaza");
m.Saludar(); // Visualizar ¡Hola Señorita Artaza!
}
}
método2;
…
métodoN;
}
Interfaces (3) public class Renault : Coche
{
private string marca;
private int metrosPorSegundo;
Ejemplo:
public Renault()
{
public interface Coche marca = "Renault";
metrosPorSegundo = 2;
{ }
string getMarca(); public string getMarca()
int avanza(int tiempo); {
return marca;
} }
Tipo Clase:
return retValue;
}
}
…
Metros SumaMetros=m-c;
Modificadores
de acceso
Los modificadores de acceso controlan la visibilidad de
los miembros de una clase
- private, sólo código 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 sólo dentro de un assembly
- protected internal, permite acceso protected e internal
Excepciones (1)
Una excepción es un objeto de alguna clase derivada de System.Exception que se
genera cuando se produce algún error en tiempo de ejecución y que contiene
información sobre el mismo.
Para que salte una excepción definida por el programador se tiene que
indicar explícitamente en el código
A diferencia de Java, no hace falta propagar las excepciones, se pueden tratar tanto en
la función que se produce como en otra función que a su vez llama a la función en la
que se produce
Excepciones (2)
Ejemplo:
Se suelen usar para manejar eventos. Los eventos se manejan mucho en las
aplicaciones con una interfaz de usuario gráfico (con ventana).
/// <summary>
/// Documentación XML que puede ser consumida por otras
/// herramientas para mostrar ayuda dinámica o generar
/// documentación en varios formatos
/// </summary>
public class Matematica {
/// <summary>
/// Calcula la suma de dos números 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 Código
Estructura tu codigo. Más legilibilidad
#region
public string PuntoYFinal {
get {
return(“Gracias”);
}
}
#endregion
Y aún hay más…
Ficheros y Flujos de datos
Acceso a bases de datos
Componentes gráficos
Recursos
http://msdn2.microsoft.com/es-
es/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/