Académique Documents
Professionnel Documents
Culture Documents
Biblioteca de clases
organizada en
Espacios Nombres
.NET Framework
Servicios necesarios
para ejecutar una Common Language Runtime [CLR]
unidad de cdigo
Funciones del SO
[Windows]
Application Programming Interface [API]
A. P. Visual C# 2010 v.1 4
Indice
Indice
Generacin de cdigo intermedio y cdigo mquina
Se puede examinar el contenido de un ensamblado con la herramienta ildasm.exe (Intermediate Language Disassembler), que se
encuentra en directorio Archivos de programa\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe
A. P. Visual C# 2010 v.1 6
Estructura de los ensamblados
Los ensamblados
contienen espacios de Manifiesto contiene lista de los
nombres que a su vez elementos contenidos en el
contienen las clases y
ensamblado, y la informacin
otros tipos. Nombre
bsica sobre el ensamblado.
Ensamblado Version
Pais Pais e idioma
Manifiesto Identificacin (opcional)
Strong Strong name
Name es una clave
Metadatos,
MSIL, y Metadatos Lista ficheros (opcional) encriptada
(Tipos) (opcional) generada por
Recursos,
el autor que
se pueden
Ensamblados identifica el
dividir en Cdigo MSIL ensamblado.
varios ficheros. referenciados
Atributos Descripcin
Recursos Ensamblado
cliente
(opcional)
Private Directorio
de la aplicacin
Los ensamblados Private residen unicamente en el mismo
directorio que la aplicacin que los referencia.
Los ensamblados Private se instalan
Las aplicaciones que mantienen una referencia a un
en el directorio llamado bin bajo el
Ensamblado: Es la unidad resultado de ensamblado Private necesitan una copia del ensamblado
directorio de la aplicacin.
la compilacin del cdigo fuente. en su mismo directorio. Si hay 10 aplicaciones que usen
Son privados de la aplicacin.
Normalmente un ensamblado se un cierto ensamblado, tendr que haber 10 copias.
corresponde con un fichero .dll o .exe. La modalidad de distribucin Xcopy hace uso de esto.
Puede haber sin embargo ensamblados Tanto los ensamblados Private como Shared pueden configurarse usando un fichero *.config.
multifichero, con varios mdulos.
Es la unidad de despliegue en .NET, y
contiene cdigo compilado y metadatos Antes de desplegar un ensamblado en el GAC, hay
necesarios para correr cdigo bajo CLR. que asignarle un nombre seguro [strong name], para
identificar univocamente al autor del cdigo .NET.
Los ensamblados
contienen espacios de
nombres que a su vez
Shared
GAC
contienen las clases y Global Assembly Cache
otros tipos. C:\Windows\assembly\
Los ensamblados compartidos [Shared] son ficheros con firma El GAC es un depsito de ensamblados compartidos.
digital que se instalan en el Global Assembly Cache, lo que Compartido significa que una aplicacin puede hacer una
permite disponer de una nica copia, si sta es de confianza. referencia a los ensamblados disponibles en GAC sin tener
GAC slo admite ficheros .dll [ no .exe ]. que disponer de copias de los ensamblados, como ocurre
en la distribucin Xcopy.
A partir de .NET 4.0, Microsoft ha decidido aislar los
ensanmblados en una ubicacin nica y diferente de
C:\Windows\assembly.
Se puede examinar el contenido de un ensamblado con la herramienta ildasm.exe que se
encuentra en Archivos de programa\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe
Crear Escribir
interfaz
Web Forms
usuario cdigo
Debug Programacin por objetos
[ASP.Net] and Deploy
Los objetos interactan entre s,
y con el usuario,
Uso de Visual y responden a eventos
Studio 2010
Acceso
a datos
Depurar e
implantar
- ADO.Net
- LINQ
Windows Forms
Visual C# en diferentes
entornos de programacin Visual Studio
WPF
Windows Presentation Foundation
WCF
Windows Comunication Foundation
El compilador C# es csc.exe. Se guarda el programa, como .cs, p.ej. Prueba.cs y, desde su mismo directorio, llamar al compilador csc.
RESULTADO
Para usar el compilador C# csc.exe y otras utilidades .NET desde cualquier directorio, hay que revisar la variable de entorno PATH.
[Panel de Control > Sistema > Configuracion avanzada del sistema > Variables de entorno > Variables del sistema > Path]
PATH contiene una lista de directorios separados por punto y coma, donde Windows busca los ficheros ejecutables (exe) (y otros).
Aadir a la variable de entorno PATH, si no estuviera ya, la ubicacin del compilador csc.exe que se encuentra en
C:\Windows\Microsoft.NET\Framework\v4.0.30319 [v4.0.30319 : versin del Framework en uso]
Pestaa Program.cs
Espacios de nombres que el sistema
importa automticamente al inicio.
Se crea un namespace que alojar
a todas las clases creadas en programa.
Una clase (al menos) del programa
Pestaa Form1.cs
Al arrancar, Visual Studio genera un fichero Una clase (al menos) del programa
Program.cs que contiene el mtodo Main,
el cual llama al mtodo Run, el cual a su Llamada a constructor de clase Form1.
vez crea Form1 llamando a su constructor.
Llamada a mtodo InitializeComponent .
Runtime Runtime
A. P.
Un programa consiste en objetos de varias clases interactuando entre s.
Visual C# 2010 v.1 17
Estructura de programas en C# (continuacin)
Namespaces:
libreras de clases
System System.Windows System.IO ......
using System;
using ....
Namespace Uno Un namespace aloja todo el programa
{
public class Programa Una clase que contiene Main
{
static void Main( ) Con metodo Main
{ se inicia programa
Se crean objetos a partir
de clases propias o de
Coche c1 = new Coche();
c1.Metodo1 ( ); Se ejecutan mtodos
libreras.
//........... de la propia clase y/o
} de los objetos creados.
}
El mtodo Main es el punto de entrada de los programas .exe, donde se inicia y finaliza el control del programa.
Main se declara dentro de una clase o un struct. Main debe ser de tipo esttico, no public.
No es necesario que el struct o la clase envolvente sean de tipo esttico.
Main puede tener un tipo de valor devuelto void o int.
El mtodo Main se puede declarar con o sin un parmetro string[] que contenga los argumentos de la lnea de comandos.
static int Main(string[] args) Como parmetro un array de cadena, tradicionalmente llamando args, aunque puede ser cualquier nombre.
El programa puede usar este array para acceder a opciones pasadas a travs de lnea de comandos cuando
static void Main(string[] args) se arranca el programa.
static int Main() Devuelve valor int que indica el xito o fallo del programa, siendo el 0 el que suele indicar xito.
Si se usa Visual Studio para crear aplicaciones de formularios Windows Forms, se puede agregar el parmetro manualmente o bien
utilizar la clase Environment para obtener los argumentos de la lnea de comandos.
Los parmetros se leen como argumentos de la lnea de comandos con ndice de base cero.
1 pila = 1 hilo
Pila de llamadas
Metodo2 ( )
Metodo1 ( )
- Retorna valor a llamador
Llamada al mtodo1()
- No retorna valor (void)
que pasa arriba de la pila.
- Excepcin
Main( )
Entrada a programa
Encapsulacin
Separacin entre implementacin e interface en las clases.
Herencia
Cdigo reutilizado en clases derivadas [clases, interfaces]
Polimorfismo
Mtodos de mismo nombre se comportan de distinto modo.
A estos tipos,
Agrupaciones de pares Enumeraciones C# aade los
nombres/valores. arrays, y los
Son tipos de valor. tipos
predefinidos.
Interfaces
Abstraccin de objetos.
Las clases contienen
una serie de miembros:
- campos [datos]
- propiedades [datos]
Clases Slo definiciones de
- mtodos [acciones]
miembros, que son
- eventos [interaccin].
implementados en
Las clases son una plantilla
las clases o estructuras.
para la creacin de objetos.
Admiten herencia.
Son tipos de referencia.
Base del polimorfismo.
A. P. Visual C# 2010 v.1 Tipos de referencia. 22
Tipos de datos
En C# hay que declarar el tipo de dato.
byte sbyte Hay 15 tipos de datos predefinidos.
Para datos ms complejos, se crea una
short ushort nueva clase y con ello un nuevo tipo
Tipos predefinidos en C#
de dato sobre la base de los tipos
int uint predefinidos, o las clases predefinidas
de C#, o del usuario.
long ulong
Todos los valores en C# son instancias
float de un cierto tipo.
Tipos de valor
Su significado y rango de valores, son
double determinados por su tipo de dato.
Los datos se crean bool Los tipos de valor pueden ser nullable types
al instanciar que admiten el valor null, con la definicin
un determinado int? a = 222 ; //usando el sufijo ? al tipo.
tipo. char
Los tipos predefinidos y los personalizables
string object tienen pocas diferencias entre s.
Los predefinidos se instancian directamente.
Tipos personalizables
int y long son los tipos favorecidos por C# y el runtime. Sufijos F y M son obligatorios con fracciones en
decimal se usa tipicamente para clculos financieros. punto flotante o literales decimales.
float f = 4.5F; // no compila sin sufijo
*u como prefijo de un tipo significa unsigned (sin signo) decimal d = -1.23M; // no compila sin sufijo
A. P. Visual C# 2010 v.1 24
Jerarqua de clases
Todas las clases .NET derivan de System.Object
Boolean
System.Object Tipos de valor
ValueType Byte
TimeSpan
Delegate
Enumeraciones
Estructuras
A. P. Visual C# 2010 v.1 25
Palabras reservadas en C#
Palabras reservadas por C# y no utilizables en variables*, etc. * A menos lleven prefijo @
Se pueden insertar espacios, tabulaciones o lneas entre palabras o lneas, porque el compilador los ignora.
A. P. Visual C# 2010 v.1 27
Identificadores en C#
Identificadores son nombres que el programador elige para sus clases, mtodos, variables, etc.
Debe ser una palabra, compuesta de caracteres Unicode, que comienze con letra o guin bajo.
Son case-sensitive.
Por convencin, parmetros, variables locales y campos privados deberan ser en notacin Camel (ej. miVar).
Espacios de nombres, tipos, nombres de miembros deberan ser con notaci Pascal (ej. MiVar).
Nombre Identificador
1er carcter : siguientes caracteres:
Letra o guin bajo. Letra, nmero, guin bajo.
No nmeros No @
Las variables de valor se guardan Memoria Memoria r1 guarda una direccin de la memoria
directamente en la memoria pila, pila [stack] montn [heap] montn donde se guarda el valor de la
con tamao predefinido segn tipo. Valor v1 = 22 variable (pepe).
Valor r2 apunta inicialmente a otra direccin de la
v2 = 22 pepe
memoria montn donde se guarda el valor de
v2 = v1 genera una copia de v1 y Referencia r1 la variable (juan).
la guarda en v2.
Ambas variables son independientes, r2 = r1 asigna el valor referenciado por r1 a r2.
aunque guardan el mismo valor. Referencia r2 juan Qu pasa con el valor antes referenciado por
Se puede cambiar el valor de v1 v2, Tipos de referencia r2 ?
sin afectar a la otra. Tipos valor El dato sigue donde estaba, pero no puede ser
accedido porque r2 apunta ahora a otro sitio.
Finalmente el recolector de basura reconocer
Memoria pila (stack) Memoria montn (heap)
Almacena tipos referencia
que el objeto r2 ya no est en uso y lo borrar.
Almacena tipos valor
* byte * string
* object Al asignar una variable de referencia a otra,
* bool
* char * array se hace una nueva referencia a un objeto
* short * interface existente.
* int * delegate Las 2 variables apuntan al mismo objeto.
* long * class Slo se copia la referencia al objeto.
* float Si se modifica el valor a travs de una de las
* decimal referencias, este cambio afecta a la otra.
* double r2 = r1
* sbyte
* ushort
* uint
* ulong
* struct
* enum
v2 = v1
A. P. Visual C# 2010 v.1 33
Caracteres - tipo char
char representa un carcter Unicode de 16 bit (2 byte), guardado como entero entre 0 y 65.535.
Un carcter literal se denota con comillas simples [comillas dobles se usan para cadenas (strings)].
char se trata como un entero, permitiendo operaciones aritmticas y de comparacin.
Un string es una serie contigua de caracteres (ej. pepe) entre comillas dobles, mientras que char es 1 carcter (ej. p') entre comillas simples.
Namespace
Tambin se puede representar tipos char en hexadecimal de 4 dgitos de caracteres Unicode*. Ej.: \x0065.
Enum Char Tambin como un entero de la forma ((char)101), donde 101 est aqui en decimal.
IsControl() Se puede especificar cualquier carcter Unicode usando un secuencia de escape Unicode.
Esta consiste de un carcter estndar \ seguido por una u y 4 dgitos con su valor hexadecimal \u0065.
IsDigit() MessageBox.Show("Pep\u0065"); //Tambin puede ser \x0065 //muestra Pepe.
IsLetter() Una barra invertida \ precediendo a un carcter indica que este carcter no tienen el significado habitual [secuencia de escape].
IsLetterOrDigit()
Una conversin implicita de un char
a un tipo numrico slo vale con
IsSeparator()
Mtodos estticos
ushort (0 a 65.535).
IsSymbol() Para otros tipos numricos, se
requiere conversin explcita.
IsLower()
IsUpper()
ToLower()
ToUpper() MessageBox.Show(char.ToUpper((char)(101)).ToString());
decimal
System
Clase
static Convert
ToInt32() int x = Convert.ToInt32(textBox1.Text.ToString()); Conversion a int de un entrada en TextBox
ToDecimal()
Mtodos static [extracto]
ToDouble()
ToByte()
ToChar()
ToDateTime()
Otros operadores de conversin
ToString()
El operador as, si falla la conversin, devuelve null, no excepcin.
as Como is, se usa slo para conversiones de referencia y boxing.
No se puede usar por conversiones del usuario, o a tipos de valor.
Expr as TipoDestino
System
Representa un instante de tiempo Representa un intervalo de tiempo Ejemplos
struct DateTime TimeSpan DateTime dt = new DateTime(2015, 12, 20);
TimeSpan ts = new TimeSpan(5,0,0,0);
MessageBox.Show((dt + ts).ToString());
Add () Add ( )
DateTime dt = new DateTime(2015, 12, 20);
mtodos
Date TimeSpan ()
- Menos
Year
+ Ms
Month != No es igual
Day == Igual
Operadores < Menor que
DayOfYear > Mayor que
propiedades
a e i o u
Algunos mtodos
Objetos
Clases
de . NET Framework
o de terceros
Clases definidas
en el programa
Instanciacin
Espacios de nombres
System Clases para tipos bsicos, eventos, controladores, interfaces
Se accede a las clases de cada espacio de nombre con la sentencia using Namespace
C# importa por defecto los espacios de nombres adecuados al tipo de proyecto elegido.
A. P. Visual C# 2010 v.1 42
POO Programacin Orientada a Objetos
Nuevos mtodos
Encapsulacin
Interface(s) : [implementacin]
Clase (base) : [Herencia] Clase derivada
Interfaces son puras declaraciones Clases son plantillas para la creacin deobjetos. Clases derivadas heredan de su clase base y
A. P.
abstractas de comportamiento. Pueden implementar una o ms interfaces. pueden aadir o variar mtodos y propiedades.
Visual C# 2010 v.1 43
Clases y Objetos : ilustracin
Instanciado
2 e inicializado
Interface
2
Objeto coche [F1 real] IComportamiento public class Coche : IComportamiento Propiedades
public void avanzar ( ) { Sus caractersticas
public string color;
public int num;
Miembros abstractos que Mtodos
Abstraccin definen el comportamiento. public void avanzar ( )
Su comportamiento
Sin implementacin de mtodos. {
Las clases pueden decir que ..//implementacin Objeto Coche [virtual]
interface(s) o comportamiento(s) }
Abstraer sus caractersticas y
acciones relevantes al fin deseado implementan. }
Uso, por tanto, OPCIONAL.
Clase Coche [virtual]
Una clase es una entidad que puede guardar datos [campos] y ejecutar cdigo [mtodos]. Contiene:
Miembros de datos : guardan datos asociados atributos - con la clase o una instancia de la clase (Data members)
Miembros de funcin: ejecutan cdigo, definiendo el comportamiento de los objetos de la clase (Function members)
Modificadores de Nombres de clases: [clase] : [clase base] [clase ] : [interfaces] implementados por
acceso a la clase y Pascal [1 letra en de la que hereda la clase, separados por comas.
modificadores de clase maysculas]. Opcional Opcional
Opcional
[modificador clase] class Coche [:] [clase base] [interfaces separados por comas]
{
Miembros // campo(s) datos (variables) que contienen el estado o caracteristicas de los objetos
de datos
// constante(s) datos que no varian durante la ejecucin
// propiedad(es) son como los campos pero con mtodos de acceso get/set
// mtodo(s) son las acciones que ejecutan los objetos, su comportamiento
// constructor(es) mtodos que instancian nuevos objetos
Miembros
de funcin
// destructor(es) mtodos que destruyen objetos
// evento(s) sucesos detectables por el objeto
// indice(s) como propiedades pero con acceso por ndice
//operador(es) definen como combinar instancias (objetos).
}
Definicin de una clase mostrando sus elementos y todos los posibles miembros que puede contener.
A. P. Visual C# 2010 v.1 45
Tipos, miembros, modificadores
Tipos Miembros Modificadores
public
Campo private
acceso
Delegados internal
Constante protected
abstract
Enumeraciones Propiedad
async
Mtodo const
event
Estructuras Constructor extern
new
Finalizador
override
partial
Interfaces Operador readonly
sealed
Evento static
Arrays unsafe
Indexador virtual
volatile
Clases
Afectan al acceso o comportamiento
Los 6 tipos personalizables de C# Miembros de que se
de los tipos y miembros
componen los tipos
internal Tipos Acceso desde su propio ensamblado. partial Clases, estructuras o mtodos parciales en
mismo ensamblado
Miembros Acceso desde u propio ensamblado. readonly Campo slo lectura
sealed Clase no heredable
static Pertenece a la clase, y no a ningn objeto
protected
Tipos Propio ensamblado, su clase y derivadas.
internal unsafe Contexto no seguro
virtual Mtodo a ser sobreescrito en clase derivada
[modificadoracceso] [modificador] class Coche [:] [clase base] [interfaces separados por comas]
Modificadores de acceso a clase
public [pblica]: accesible a toda clase o ensamblado.
private [privada]: accesible a cdigo dentro de la misma clase.
internal [interna]: accesible dentro programa (ensamblado). Por defecto: internal
protected [protegida]: accesible a su clase y a sus clases derivadas.
protected internal [protegida interna]: accesible a misma clase y derivadas, y a su propio programa (ensamblado).
Ensamblado [programa] EA
Otro ensamblado
public class A1
private class A2
internal class A3
El constructor en una clase abstracta public class Saldo : Cuenta Campo uno
se define como protected porque Campo uno
slo se usa en subclases. Mtodo uno
Al crear objetos de una subclase instanciacin
Mtodo uno Mtodo dos Mtodo dos
concreta, se invoca el constructor de
la clase base para inicializar campos
de datos definidos en ella. Mtodo abstracto Mtodo abstracto
A. P. Visual C# 2010 v.1 49
Clases static
Las clases static [estticas] slo contiene miembros static. No se instancian, ni se heredan.
Son clases que exponen toda su funcionalidad, que suele ser de uso general, a nivel de clase.
Las clases o estructuras que slo tienen funcionalidad a nivel de clase (static) tambin se llaman utility class.
Namespace
System
System.Math y System.Environment son 2 clases estticas.
public static class public static class
GetEnvironmentVariable() Todos sus mtodos son estticos -> usar nombre de clase Math en
Max() lugar del objeto llamador.
Round() GetLogicalDrives() Math.IEEERemainder(222,5);
Sin() SetEnvironmentVariable()
Mtodos static
Cos() CommandLine
Tan() CurrentDirectory
Propiedades static
Ensamblado [programa] EB
internal
Otro ensamblado public Mismo
Misma clase
ensamblado
protected
internal
Objetos de clase A
Campos Operadores Mtodos Los objetos acceden o1 o1.nombremiembro
Propiedades Indexers Constructores a los miembros non-static
con la notacin de punto (.)
Eventos Destructores tras el nombre del objeto. o2 o2.nombremiembro
static non-static
Campos static en una clase son campos o variables de clase. Campos no-static en una clase son campos o variables de instancia.
Mtodos static en una clase son mtodos de clase. Mtodos no-static en una clase son mtodos de instancia.
Para usar un campo o mtodo static, no se necesita un objeto. Para usar un campo o mtodo no-static, hay que hacerlo desde un objeto.
Si una clase tiene un campo static, y se instancian 100 objetos, slo existe Si una clase tiene un campo no-static, y se instancian 100 objetos, habr 100 copias del
en memoria una copia del campo, vista por los 100 objetos. campo en memoria. Cada objeto tendr su valor propio.
Si una clase tiene un mtodo static, y se instancian 100 objetos, slo existe Si la clase tiene un mtodo no-static, y se instancian 100 objetos, slo una copia del
una copia en memoria, y el mtodo no recibe referencia del objeto que lo mtodo existe en memoria, y el mtodo recibe una referencia con la direccin del objeto
est llamando. que lo est llamando.
Los mtodos static no pueden acceder a miembros de instancias. Los mtodos no-static acceden a miembros de instancias.
Para llamar a miembro static desde fuera de su clase, usar operador . Para llamar a un miembro no-static desde fuera de su clase, se usa el operador .
A.nombreclase.nombremiembro.
P. * Las constantes son implicitamente static. nombreobjeto.nombremiembro.
Visual C# 2010 v.1 53
Campos [Fields]
Los campos se definen como las variables, incluyendo la opcin de inicializacin en la definicin.
Los campos son el estado o caractersticas de los objetos que las clases representan.
Modificadores de acceso
Public: accesible desde cualquier
clase o ensamblado. Defecto.
Private: accesible a cdigo dentro
de la misma clase. Modificadores de campos
Internal: accesible a cdigo static: pertenece a la clase,
dentro del mismo ensamblado no a sus objetos. Nombre de campos public: notacin Pascal: NombreCampo.
Protected: misma clase o clases readonly: slo lectura. Los private, usan Camel : nombreCampo [1 letra en minscula].
derivadas. Asignacin en declaracin o a
Protected internal: mismo travs constructor.
ensamblado o clases derivadas en - Campos numricos se inicializan a 0.
otro ensamblado. - Campos boolean se inicializan a false.
- Tipos referencia se inicializan a null.
Por seguridad, es recomendable declarar como private los campos que no interese que sean accesibles desde fuera de la clase,
y usar como Property esos mismos campos, y acceder a ellos con sus mtodos get y set, que adems permiten validaciones.
A. P. Visual C# 2010 v.1 54
Propiedades [Properties]
Las properties son iguales a los campos desde el exterior, pero contienen lgica interna, como los mtodos.
Se declaran como los campos pero son mtodos con bloques - accessors - set y get adicionales.
Modificadores de acceso
public: accesible desde Se obtiene o establece una propiedad
cualquier clase o exactamente igual que con los campos.
ensamblado.
private: accesible a get y set se llaman implicitamente.
cdigo dentro de la TestPropiedad tp = new TestPropiedad();
misma clase. tp.Edad = 25; // asignacin
internal: accesible a int z = tp.Edad; // lectura
cdigo dentro del mismo
ensamblado
protected: misma clase
o clases derivadas. Nombre de la propiedad en Pascal.
La accesibilidad permitida a get y set depende de la de su property, y no puede ser nunca mas amplia que la propiedad a que pertenecen.
Por seguridad, es recomendable declarar como private los campos que no interese que sean accesibles desde fuera de la clase,
y usar como Property esos mismos campos, y acceder a ellos con sus mtodos get y set, que adems permiten validaciones.
A. P. Visual C# 2010 v.1 55
Constantes
Una constante puede ser cualquier de los tipos numricos predefinidos: bool, char, string, o una enumeracin.
Una constante se declara con const y tiene que inicializarse a su valor constante.
Las constantes son por definicin static, y por tanto no necesitan llevar el modficador static explicitamente.
En C# no existen las constantes globales, las constantes tienen que definirse de un tipo, normalmente clase.
Extension methods son una forma de aadir un nuevo mtodo de instancia a una clase existente fuera de su declaracin..
A. P. Visual C# 2010 v.1 57
Paso de argumentos [a mtodos]
Los mtodos pueden tener una lista de parmetros, que les dan su potencia y versatilidad.
Los parmetros definen un conjunto de argumentos que deben ser proporcionados al mtodo.
Los argumentos pueden pasarse por valor o por referencia, con indenpendencia de que sean de tipo valor o referencia.
Optional parameters permiten a las funciones dar parmetros por defecto de forma que los llamadores pueden omitir el paso de esos argumentos.
Una declaracin de parmetro opcional:
void Fijo (int x = 222) { MessageBox.Show (x.ToString()); }
Se puede llamar as :
Fijo ( ); // Presentara en ventana 222
Named arguments permiten a un llamador identificar un argumento por nombre ms que por su posicin.
Por ejemplo, el mtodo anterior puede ser llamado as:
Fijo (x :555); // Presentara en ventana 555
Instanciar con new, reserva memoria montn para cada uno de los campos y mtodos de la clase. Al declarar una variable de una clase,
La referencia al objeto sirve para acceder a sus campos y mtodos usando el operador dot (.). se reserva memoria para la referencia,
Empleado emp = new Empleado ( ); //declara e instancia objeto Empleado pero no para los datos de la clase.
emp.nombre = Pepe Gmez; //accede y asigna el campo nombre del objeto Es el operador new el que reserva e
inicializa memoria para la instancia.
La operacin emp.nombre accede al campo nombre del objeto Empleado al que referencia emp.
La referencia se guarda en la memoria
De igual manera, para invocar un mtodo del objeto Empleado: de pila y montn, segn el tipo.
emp.mail ( );
this this se usa cuando un mtodo necesita acceder a campos o mtodos dentro de su misma clase. Datos
public double calculoPaga ( ) referencia
{
return this.salario/12; // aqui this es opcional aunque facilita la comprensin
} Pila [stack] Montn [heap]
A. P. Visual C# 2010 v.1 59
Diferentes clases
Clase : (herencia) Clase derivada Permiten instanciacin y
herencia.
Ni miembros static La clase derivadas heredan
ni constructores son los miembros de su clase
new new heredables. new new base, que ellas pueden
modificar, y/o aadir
Modificadores nuevos miembros.
Objeto1 Objeto2 Objeto1 Objeto2
No admite
Ni instanciacin ni
instanciar
ni heredar
Clase static : (herencia) No heredable
herencia.
Los mtodos, incluso los constructores, pueden ser Una subclase puede sobreescribir los mtodos que hereda.
sobrecargados. Sobreescrito, un mtodo contiene la misma firma (nombre
Sobrecarga significa que dos o ms mtodos tienen el y lista de parmetros) que el mtodo en la clase base, pero
mismo nombre, pero diferentes lista de parmetros. puede tener diferente implementacin.
Tienen que tener lista de parmetros diferentes, y En la clase base el mtodo debe tener el modificador
adems pueden tener diferente return. virtual, y en la clase derivada el mismo mtodo debe
Tener diferente slo el return no es sobrecarga. presentar el modificador override
Los constructores se justifican cuando una clase tienen muchos campos variables de instancia - que
inicializar uno a uno. Se reduce el esfuerzo de inicializacin utilizando constructores con firma.
car = new Coche( ); //asigna la referencia a nuevo objeto Coche, que guarda en montn
La referencia car no es un objeto. El objeto en s, no tiene un nombre de variable, y la nica forma de acceder a l es a travs de su referencia car.
Una referencia es (tipicamente) un entero de 32-bits con la direccin de memoria del objeto al que hace referencia.
Los constructores son mtodos de las clases. Una clase puede tener varios con distinta firma (sobrecargados).
Si la clase no tiene ningn constructor definido, se crea uno para ella por defecto, sin parmetros.
El nombre del (mtodo) constructor debe ser igual al de la clase a que pertenece.
Un contructor con firma, crea objetos con la inicializacin proporcionada por la firma (argumentos) del constructor.
A. P. Visual C# 2010 v.1 64
Clases y Objetos : ilustracin [uso de constructor sin argumentos]
Clase Creacin Objetos (instanciacin) Inicializacin Objetos
Inicializacin
{ 2
} c3.color = azul;
Coche c3=new Coche();
c3.num = 3;
Si la clase no cuenta
con constructores, 3
C# crea uno sin
argumentos.
3
Clase C#
Instanciacin con palabra clave new Incializacin con asignacin atributos
A. P. Visual C# 2010 v.1 65
Indice
Clases y Objetos : ilustracin [uso de constructor con argumentos]
Instanciacin e
Clase Inicializacin Objetos
Instanciacin + Inicializacin
Coche c2 = new Coche (rojo,2)
public class Coche
{ 2
3
Clase C# Instanciacin con palabra clave new
Instanciacin e inicializacin
A. P. Visual C# 2010 v.1 66
Indice
Herencia
Mecanismo para definir una nueva clase (derivada) a partir de otra clase (base).
La herencia es la forma bsica de reutilizacin de cdigo en la programacin [P.O.O.].
Una clase slo puede heredar de una nica clase base. En C# no hay herencia mltiple.
Por defecto toda clase deriva de la clase Object, base de toda la jerarqua de clases C#.
La herencia crea clases parecidas a su clase base, modificando y/o aadiendo miembros propios.
Los nicos miembros que no se heredan son los mtodos private, y los constructores (aunque son public).
Se implementa
....................{...} en derivada
Oculta este
..new ...... {...}
class Empleado mtodo heredado
...virtual ......{..}
...abstract.....
Miembros aadidos y/o
Miembros aadidos y/o
modificados en Empleado.
modificados en Empleado.
: herencia No aparecen los heredados.
class Object No aparecen los heredados.
clase derivada
clase base
Base de todas
las clases de C# Implicitamente deriva de object
Encapsulacin
class Coche
private variables ;
public get () {...} // tpico de Java
private constants ; Objetos
private methods () public set () {...} // tpico de Java
de la
2
Private significa que un campo instance variable - no puede ser accedido desde otras clases.
Podra usarse un miembro Property para leer/establecer el valor de un campo private.
Tambin podran usarse mtodos set y get para leer o escribir campos private.
Por seguridad, es recomendable declarar todos los campos private, y Property o set y get .
Obtiene HashCode
Clases construidas
Instanciacin formal de objeto miGen1 de la clase Generica.
class Generica < int >
Generica < int> miGen1 = new Generica <int> ( ) ;
Clase genrica { int var1 ; }
class Generica < T1> Instanciacin formal de objeto miGen2 de la clase Generica.
{ class Generica < double > Generica < double> miGen2 = new Generica <double> ( ) ;
public T1 var1 = new T1(); { double var1 ; }
}
Instanciacin formal de objeto miGen3 de la clase Generica.
class Generica < short > Generica < short> miGen3 = new Generica <short> ( ) ;
{ short var1 ; }
T1 representa al tipo final real Clases que utilizan la plantilla Instanciaciones a partir de las clases construidas segn la clase Generica
La definicin es como la de una clase normal, colocando los parmetros de tipo entre corchetes angulares < > y separados por comas.
C# tiene 5 clases de genricos: clases, estructuras, interfaces, delegados, y mtodos. 4 son tipos y mtodos son miembros de tipos.
Los genricos permiten disear cdigo reutilizable y parametrizable que sirva para ms de un tipo.
El cdigo genrico contiene espacios para tipos, que se ocupan con los tipos reales al crear la instancia de la clase.
Un genrico no es un tipo sino una plantilla para un tipo.
El uso de genricos reduce cdigo: un nico cdigo con una misma funcionalidad que puede actuar sobre diversos tipos.
Una interface se parece a una clase en que: Un interface se diferencia de una clase en que:
Puede declarar cualquier n de miembros. Los interfaces no se instancian.
No tienen constructores.
Todos sus mtodos son abstractos.
Un interface se implementa por una clase o struct.
Los nombres de las interfaces deberan ser
adjetivos, y terminar en able o ible . Un interface puede heredar de mltiples interfaces.
apropiado. Por lo dems como las clases.
[modificador acceso] interface ITest Una declaracin de interface puede tener cualquiera de los
Declaracin
interface
[modificador acceso] class Prueba : ITest Clase que implementa el interface ITest implementando su mtodo int Cal.
{ En la declaracin de la clase, se separa con : el interface implementado.
Si la clase derivara de una clase base, el interface(s) aparecera tras la clase base.
int Cal ( int x, int y, int z) {..implementacin..} [modificador acceso] class Prueba : ClaseBase1 , ITest , ITest1
}
Que la clase implementa un interface se denota con la
misma notacin como si la clase derivara del interface.
La documentacin .NET especifica al detalle las condiciones requeridas a un mtodo para implementar un Interface.
A. P. Visual C# 2010 v.1 71
Uso de los interfaces
Al ser los interfaces tipos, .NET, se pueden disear mtodos que toman interface(s) como parmetros.
: A
: I1,I2
Mtodo (argumentos1)
Polimorfismo (Sobrecarga)
Mtodo (argumentos3)
interface IDuplo
{ Interface Distinta implementacin !
int Doble (int x) ;
}
Clase implementadora Clase implementadora
IDuplo id1 = (IDuplo) d1; Convierte a tipo interface los objetos d1 y d2 IDuplo id2 = (IDuplo) d2;
para poder acceder a mtodo(s) del interface
Polimorfismo mediante interface : uso del mismo mtodo con diferentes comportamientos segn los argumentos pasados (d1 d2).
A. P. Visual C# 2010 v.1 74
Herencia y Polimorfismo
public class Duplo
{
virtual public int Doble (int x)
{ Clase base
return x * 2 ;
}
Implementacin modificada !
} Implementacin modificada !
Polimorfismo mediante herencia : uso del mismo mtodo con diferentes comportamientos segn los argumentos pasados (d,d1, d2).
Clase Abstracta1
Una clase slo puede derivar de una Una clase derivada de una clase
sola clase base, y por tanto abstracta debe implementar todos
implementar en todo caso, los los miembros abstractos de la clase,
miembros (abstractos) de dicha los use o no, mediante override,
clase base y su lnea jerrquica. a no ser que ella misma sea Interface1
No de otras clases fuera de esa lnea declarada abstracta.
La clase Derivada1 debe implementar todos los miembros de los interfaces que
decida implementar, y puede hacerlo de varios interfaces.
Interface3
namespace
Ejemplos de interfaces predefinidos en librera de clases BCL*, subconjunto de FCL*.
System Estos interfaces representan un contrato que los desarrolladores deben respetar System.Collections
para garantizar a sus consumidores el uso de sus clases que los implementan.
Implementar estas interfaces predefinidas, permite disponer de funcionalidades como clonar, ordenar, y enumerar.
Dichas funcionalidades son asimismo accesibles a travs del uso de clases derivadas de otras que las implementen.
La documentacin .NET especifica al detalle las condiciones requeridas a un mtodo para implementar un Interface.
* BCL = Base Class Library subconjunto de FCL = Framework Class Library
A. P. Visual C# 2010 v.1 78
Indice
Enumeraciones [enum ]
enum Zona
{
MessageBox.Show(((int) Zona.Centro).ToString());
Norte, Centro, Sur string z1 = Zona.Centro;
} Acceso por nombre
Asignacin por defecto,
valores enteros desde 0.
int z2 = (int) Zona.Centro;
MessageBox.Show( Zona.Centro.ToString());
Acceso por valor
Las enumeraciones son tipos de valor y guardan sus datos directamente en la memoria de pila [stack].
Enums slo tienen un tipo de miembros: constantes con nombre y valores enteros.
A. P. Visual C# 2010 v.1 79
Indice
Estructuras [ struct ]
Una estructura se usa en lugar de una clase cuando se desea disponer de un tipo de valor.
Cada instancia de una estructura se guarda en la memoria de pila que es ms rpida y eficiente.
Las estructuras no soportan herencia, salvo la de derivar implicitamente de System.ValueType.
struct NombreStruct
{ Una struct puede tener todos los miembros de una clase, salvo constructor sin parmetros
// ...miembros (que es aadido automaticamente), destructor, y miembros virtuales.
}
Esquema definicin de estructura
Clases Delegados Declarar un nuevo tipo delegado con firma y tipo de retorno.
Declarar tipo Declarar Clase Declarar Delegado delegate int Multiplicar (int x) ;
Declarar una variable delegado del nuevo tipo delegado.
Declarar Declarar variable Declarar variable
variable del tipo de la clase del tipo delegado
MultiDelegate t ;
del tipo
Crear objeto del tipo delegado, y asigna a variable delegado.
El nuevo objeto delegado incluye una referencia a un mtodo
Crear instancia Crear instancia con la misma firma definida en la declaracin.
Instanciar de la clase y asignar su del delegado, asignar su t = new Multiplicar (Duplicar); t = Duplicar;
referencia a la variable referencia con el 1
mtodo a la variable. int Duplicar (int x) { return x * 2}; Es un posible mtodo de t.
Otros podran ser int Triplicar(int x){return x*3};,
Aadir mtodos : t +=Triplicar;
t=Quintuplicar;. int Quintuplicar (int x) {return x*4}; , etc.
Quitar mtodos : t -= Duplicar; . Todos con misma firma y retorno declarados en delegado !.
Se forma as la lista de invocacin t = Duplicar; es una forma vlida abreviada de hacer lo mismo.
de los llamados multicast delegates.
En el cdigo se invoca al delegado, como si fuera un mtodo,
y se ejecutan sus mtodos, pasando a todos el mismo argumento.
Usar la
variable Usar el objeto Invocar objeto delegado int result = t (3) ; int result = t. Invoke (3);
Sus propiedades y mtodos. Se invocan todos mtodos de la lista. Tambin es vlido int result =t. Invoke (3);
Se genera el evento
Se genera el evento, y
a travs del delegado se
invoca a mtodo(s)
controlador(es).
Suscriptor1
Cdigo que genera
el evento. ControlEvento1 (firma)
evento (firma);
delegate void delegado (firma);
Clase emisora Lista de llamadas
[controladores registrados
[Publisher o con la misma firma y
Broadcaster] retorno del delegado]
Suscriptores registran
controladores de eventos
Declaracin evento evento += new delegado(ControlEvento1); en el delegado con
del tipo Delegado. operadores += y .=. Suscriptor2
event delegado evento; evento += new delegado(ControlEvento2);
ControlEvento2 (firma)
ControlEvento1 (firma)
Los controladores de evento
pueden ser de la misma clase del
ControlEvento2 (firma) emisor o de clases diferentes.
Registro tambin posible:
Pueder ser mtodos estticos
evento += ControlEvento1; Se llaman sucesivamente todos los controladores registrados,
o de instancia.
evento += ControlEvento2; con los mismos argumentos para todos ellos.
Pueden ser mtodos annimos o
expresiones lambda.
A. P. Visual C# 2010 v.1 85
Eventos : pasos necesarios
Cdigo necesario para la gestin de eventos
Clase Emisora La declaracin del Delegado y el registro de
Declaracin
1 Delegado
controladores pueden ir fuera de la clase emisora.
Objeto que genera evento Informacin adicional Si el delegado se declara dentro de la clase, puede
llevar prefijos public, protecte, internal o private.
public delegate void EventHandler ( object sender, EventArgs e ) ;
El delegado EventHandler es un tipo delegado predefinido, dentro del espacio System.
Se podra usar un delegado existente, pero es recomendable usar el estandar definido.
Clase Suscrita
El delegado define la firma de los eventos que lo usan y de los controladores que se registran en l. Se pueden suscribir varios controladores a un mismo
evento, y todos sern llamandos al generarse el
Declaracin
2 Evento
evento. Estos pueden ser controladores que forman
parte de la clase que genera el evento, o
Tipo Delegado Nombres de eventos separados por comas controladores definidos en otras clases (suscritas).
delegate void delegadovalido (firma); Los eventos pueden usar cualquier delegado vlido, incluso sin firma.
Declaracin de
controlador evento
de una clase
[modificadoracceso] tiporetorno Evento1EventHandler (firma)
suscrita al evento.
Registro
Registro
Evento(s)
oe.evento1 += os.Evento1EventHandler;
Forma simplificada de registro a partir de C# 2.0. [method group conversion]
Si el evento es static,
la clase registra el evento
clase.evento1 += os.Evento1EventHandler; Evento static
OnEvento1 (argumentosfirma) En alguna parte del programa se aloja la llamada al mtodo OnEvento1, que se produce
cuando se dan las condiciones de ocurrencia del evento.
.... Se sugiere el nombre OnEvento1 para este mtodo.
.... Con la firma se pueden pasar como argumentos datos, como objeto emisor, etc.
public class EmisoraEjemplo Ejemplo con: delegate void delegadovalido(object sender); //delegado
{ public void Evento1EventHandler(object sender) {...} / /controlador
....
.... OnEvento1(azul); //azul es el objeto emisor en este ejemplo
public event delegadovalido Evento1; ....
.... ....
public void OnEvento1(firma) Evento1(sender); //bajo sender se enva azul al controlador
....
{
If (Evento1 != null)
Evento1 (firma) ;
}
..
}
class Carrera
Partimos de la clase Coche a la 1
class Coche 2
3
Coche c3 = new Coche() ;
c3.color = azul;
public string color ;
public int numero ; c3.numero = 3; 3
public int recorrido ; c3.recorrido = 0 ;
Registro de controlador(es)
c1.Final += new System.EventHandler(Llegada); (Llegada) con el delegado
c2.Final += new System.EventHandler(Llegada);
c3.Final += new System.EventHandler(Llegada); 1
Coche c1 = new Coche() ;
Si el evento se declara static, bastara con un slo controlador c1.color = verde;
1
Coche.Final += new System. EventHandler(Llegada); c1.numero = 1;
public static event EventHandler Final ; // evento static c1.recorrido = 100 ;
class Coche
Coche c2 = new Coche() ; 2
c2.color = rojo;
c2.numero = 2; 2
Slo falta que c2.recorrido = 200 ;
aparezca el
evento !
Coche c3 = new Coche() ; 3
Algn cdigo se encarga de hacer
public string color ; c3.color = azul;
avanzar el recorrido de cada coche 3
public int numero ; c3.numero = 3;
[no contemplado aqu].
public int recorrido ; c3.recorrido = 300 ;
public event EventHandler Final; public void Llegada (object sender, EventArgs e);
{
Declaracin del evento declarando MessageBox.Show (Ganador: + sender.ToString()) ;
el delegado al que se acoje. }
Controlador que evento que actuar en respuesta al evento, una vez registrado.
Puede ser un slo controlador, o bien tantos controladores como objetos (coches).
2
Aqui llega el evento !
Coche c2 = new Coche() ;
c2.color = rojo;
.... 2
c2.numero = 2;
If (c1.recorrido >= meta) c2.recorrido = 200 ;
{OnFinal (verde, EventArgs.Empty);}
public string color ; If (c2.recorrido >= meta)
3
public int numero ; {OnFinal (rojo, EventArgs.Empty);} Coche c3 = new Coche() ;
public int recorrido ; If (c3.recorrido >= meta) c3.color = azul;
{OnFinal (azul, EventArgs.Empty);} c3.numero = 3; 3
public event EventHandler Final; .... c3.recorrido = 300 ;
private void bSalir_Click(object sender, RoutedEventArgs e) { ...................} // controlador agregado automaticamente por el IDE al hacer click en botn bSalir.
Namespace
Consola
System.Timers
Ejemplo: aparecer por pantalla un texto a cada intervalo de tiempo.
clase
Timer using System; Se crea objeto Timer
using System.Timers; de nombre timer1, se
le asigna un intervalo
namespace ConsolaTimer de 1000 ms.
Start()
{ El objeto timer1
class Programa genera el evento
Stop()
mtodos
{ Elapsed, y el delegado
static string VerTxto= Consola"; ElapsedEventHandler,
Timer() Timer timer1 = new Timer(); static void Main ( ) llama al mtodo
constructores { Escribe al que apunta,
Timer timer1 = new Timer(1000) ; Timer timer1 = new Timer(1000); el cual presenta el
Timer(ms)
timer1.Elapsed += new ElapsedEventHandler(Escribe); texto de la variable
timer1.Start(); VerTxto.
Console.ReadKey();
propiedades
Hay otras clases Timer en .NET: en System.Threading [WPF], y en System.Windows [Windows Forms].
A. P. Visual C# 2010 v.1 95
Timers - II
La clase DispatcherTimer genera eventos - Tick - a intervalos regulares de tiempo en aplicaciones WPF.
Namespace
WPF System.Windows.Threading
Ejemplo: aparecer por pantalla un texto a cada intervalo de tiempo.
clase
Se crea objeto Timer using System; DispatcherTimer
de nombre timer2, se using System.Windows;
le asigna un intervalo using System.Windows.Threading;
de 1000 ms.
El objeto timer2 Start()
namespace WpfApplicationTimer
mtodos
genera el evento Tick, {
y el delegado Stop()
public partial class MainWindow : Window
EventHandler llama al
mtodo Tick al que { DispatcherTimer()
apunta, el cual genera public MainWindow() constructor
la ventana de texto. {
propiedades
InitializeComponent(); Interval
DispatcherTimer timer2 = new DispatcherTimer();
timer2.Interval = TimeSpan.FromMilliseconds(1000);
IsEnabled
timer2.Tick += new EventHandler(Tick);
timer2.Start();
} Tick Evento
static void Tick(object source, EventArgs e)
{ MessageBox.Show("DispatcherTimer"); }
}
}
Hay otras clases Timer en .NET: en System.Timers [CONSOLA], en System.Windows.Forms [Windows Forms].
A. P. Visual C# 2010 v.1 96
Indice
Timers - III
La clase Timer genera eventos - Tick- a intervalos regulares de tiempo en aplicaciones Windos FORMS.
Namespace
{ y el delegado
public Form1() EventHandler llama al
Timer() Timer timer3 = new Timer(); { mtodo Tick al que
constructor InitializeComponent(); apunta, el cual genera
Timer timer3 = new Timer(); la ventana de texto.
timer3.Interval = 1000;
timer3.Tick += new EventHandler(Tick);
propiedades
Hay otras clases Timer en .NET: en System.Threading [WPF], en System. TimerS [CONSOLA].
A. P. Visual C# 2010 v.1 97
Indice
Entradas/Salidas por consola
System System
Clase Console Clase Console
Console Console
Console.Read( ); Console.Write( );
Console.ReadLine( ); Console.WriteLine( );
Console.ReadKey( );
MouseHover Cuando el puntero est sobre el control por un tiempo configurable Clase MouseEventArgs
MouseLeave Cuando el puntero deja el control Clase MouseEventArgs
MouseMove Cuando el puntero se mueve sobre el control Clase MouseEventArgs
MouseUp Cuando se libera un botn del ratn mientras el puntero est sobre el control Clase MouseEventArgs
MouseWheel Cuando la rueda del ratn se mueve mientras el control tiene el foco. Clase MouseEventArgs
La propiedad de slo lectura MouseWheelPresent en la clase SystemInformation
indica si el sistema operativo cree que hay una rueda de ratn presente.
System.Windows
Clase MessageBox
Show(Mensaje)
Show(Mensaje, Rtulo)
Mtodos
Ejemplo
var result = MessageBox.Show(" Volver a jugar ? ", "Rtulo", MessageBoxButton.OKCancel, MessageBoxImage.Stop);
If (result == MessageBoxResult.Cancel)
{.....}
Ejemplo
var result = MessageBox.Show(" Volver a jugar ? ", "Rtulo", MessageBoxButton.YesNo, MessageBoxImage.Question);
If (result == MessageBoxResult.Yes)
{.....}
Para trabajar con ficheros, generalmente hay que hacer uso de streams.
La clase Stream sirve para la
entrada y salida de bytes.
BinaryReader lee datos primitivos como valores BinaryWriter escribe datos primitivos como
A. P.
binarios en una codificacin especfica. valores binarios en una codificacin especfica.
Visual C# 2010 v.1 102
System.IO
System.IO
BinaryReader Lee tipos de datos primitivos como valores binarios en una codificacin especfica
BinaryWriter Escribe tipos primitivos como valores binarios en una codificacin especfica
abstract
File
FileInfo mtodos de instancia para crear, copiar, borrar, mover y abrir archivos
static
Directory
DirectryInfo mtodos de instancia para crear, mover y borrarr directorios y subdirectorios
static
Path abstract
Cada clase derivada de Stream proporciona una implementacin
Stream
especfica para un entorno particular.
* static : no se necesitan objetos StringWriter Igual que StreamWriter pero para buffer en lugar de fichero.
** abstract : miembros que usarn sus clases derivadas
A. P. Visual C# 2010 v.1 103
Manejo de Ficheros
System.IO dispone de una serie de clases para realizar operaciones con ficheros y directorios, como copiar,
mover, crear, borrar, y leer o establecer sus atributos y permisos.
System.IO
clase
Utility class* Utility class* Utility class* FileSystemInfo abstracta
Miembros
LastWriteTime
AppendText() GetFileNameWithoutExtension()
Mtodos static Name Name
Delete() Mtodos static AppendText()
Create()
Exists() CopyTo()
Mtodos para manipular CreateDirectory()
nombres de ficheros y vias a Create()
Copy() dierctorios. Delete()
CreateText()
Move() Delete() GetDirectories()
Mtodos estticos para crear, copiar, borrar, mover y abrir archivos Tambin posible
y contribuye a la creacin de objetos System.IO.FileStream.
File Clase [static] File FileInfo desde FileInfo
Mtodos Mtodos
estticos*
de la clase File OpenText CreateText AppendText estticos*
ReadToEnd Lee los caracteres restantes en la entrada y los devuelve en una cadena.
* Mtodos estticos : se llaman sin necesidad de instanciar la clase. Por ejemplo File.OpenText directamente.
A. P. Visual C# 2010 v.1 105
Lectura/escritura de texto con StreamReader y StreamWriter
Los ficheros se clasifican segn contengan texto o datos binarios.
Un fichero de texto, tambin llamado fichero ASCII, se lee y edita con editores de texto como Bloc de Notas.
Todos los dems son ficheros binarios. No se pueden leer ficheros binarios con un editor de texto.
Para trabajar con ficheros, generalmente hay que hacer uso de streams.
namespace
System.IO
clase StreamReader Stream es la clase base de todas las secuencias. StreamWriter clase
Es un canal entre la aplicacin y una fuente de datos.
Una secuencia es una abstraccin de una secuencia de bytes,
como un archivo, un dispositivo de E/S, o un socket TCP/IP.
Peek () Flush()
StreamReader lee lneas de informacin desde un archivo de
mtodos
Read () //2 sobrecargas texto estndar. Write () //varias sobrecargas
StreamWriter est diseado para dar salida a caracteres
ReadBlock () WriteLine ()
mtodos
//varias sobrecargas
en una codificacin determinada.
ReadLine () Estas 2 clases se usan para leer/escribir textos en un fichero. Close ()
No soportan acceso aleatorio.
ReadToEnd ()
propiedad
Peek : devuelve el siguiente carcter disponible pero no lo consume.
Close () Flush : borra todos los bufferes internos. NewLine
propiedad
EndOfStream //bool
BinaryReader Lectua/escritura de tipos de datos primitivos como valores binarios en una codificacin especfica BinaryWriter
Mtodos Read
sobrecargados Mtodos Write
sobrecargados
Condition No
= true ? else Case 1 default
switch
Si (variable)
{ {
{ { Case 2 Case 3 sentenciasn
sentencias1
sentencias1 sentencias2 break;
break;
} } }
}
{ {
sentencias2 sentencias3
break; break;
} }
if/else opera slo sobre expresiones Boolean
do
while (int n == 5) {
{ MessageBox.Show (bucle do/while");
MessageBox.Show (bucle while"); }
} while (int n == 5);
sentencias i++
Condicin No
next n break ;
10
true ?
20
No
Si
30
40 continue ;
{
Recorre todos
sentencias break ;
los elementos
50 }
de la matriz
Si
int[] dec = { 10, 20, 30, 40,50 }; for (i = 0; i < 10; i++)
foreach (int n in dec) {
{ MessageBox.Show(i.ToString());
MessageBox.Show(n.ToString()); }
}
"i" slo es visible dentro del bucle.
A. P. Visual C# 2010 v.1 110
Indice
Manejo de errores y excepciones
Una excepcin es un tipo de error. C# incorpora el tratamiento estructurado de excepciones.
Las excepciones proporcionan un mecanismo seguro para tratar errores de sistema y de la aplicacin.
Todas las excepciones heredan de la clase System.Exception.
Tratamiento de excepciones
El bloque try termina donde ocurre la try
excepcin.
{
// cdigo que trata y lanza las excepciones
}
catch (<exceptionType> e) catch contiene el cdigo que se ejeucta
{ cuando se producen las excepciones.
//explicita excepciones a tratar Los bloques catch se pueden especializar
para tratar tipos concretos de excepciones,
} por lo que puede haber varios bloques catch.
catch [opcional - alternativa] Es posible omitir totalmente este parmetro,
{ y tener un un bloque general catch para
//explicita excepciones alternativas todas las excepciones.
}
finally cdigo que se ejecuta siempre, Finally [opcional]
bien tras un bloque try sin excepcin, o tras {
tratar una excepcin en bloque catch o bien //se ejecuta ocurran o no excepciones
antes de que no excepcin no tratada
progrese hacia arriba en la pila de llamadas.
}
Directiva Significado
#define identifier Define un smbolo de compilacin
#undef identifier Anula smbolo de compilacin
#if expression Si la expresin es true, compila la seccin siguiente
#elif expression Si la expresin es true, compila la seccin siguiente #region Bloque1
#else Si el #if #elif anteriores son false, compila la seccin siguiente #region y #endregion definen el inicio y
final de un bloque de cdigo que puede
#endif Marca el final de un #if
ser expandido o contraido a voluntad,
#region name Marca el inicio de una seccin de cdigo. Sin efectos de compilacin. para tener un vista rpida o detallada.
#endregion name Marca el final de la seccin de cdigo antes abierta con #region name. Es para facilitar la visibilidad del cdigo.
#endregion Bloque1
#warning Mensaje* Visualiza Mensaje de advertencia en tiempo de compilacin
#error Mensaje* Visualiza Mensaje de error en tiempo de compilacin
El bloque queda comprimido a una sola
#line integer Fuerza la siguiente lnea de cdigo a ser el n lnea dado por integer.
lnea con el nombre del bloque. Al hacer
#line default Restablece la numeracin y en su caso el nombre del fichero click sobre el signo +, se abre el bloque.
#line hidden Oculta el cdigo que sigue. Se cancela con directiva #line
#line filename Cambia el nombre aparente del fichero a filename
#pragma warning Activa/desactiva mensajes de advertencia con disable y restore.
* Mensaje sin comillas
A. P. Visual C# 2010 v.1 112
Indice
Reflexin
La reflexin obtiene en RunTime los tipos de un ensamblado *dll *.exe, con sus mtodos, campos, propiedades y eventos.
Por cada tipo utilizado en un programa, el CLR crea un objeto de la clase Type* con informacin sobre dicho tipo.
Namespace
// Uso de mtodo GetType () de System.Object.
using System.Reflection; Coche cx = new Coche();
Type t = cx.GetType( );
Se necesita un objeto
Clase abstracta
System.Type* 3 formas distintas de obtener un objeto Type*
// Obtener tipo con typeof.
GetFields() GetField() FieldInfo[ ] Type t = typeof(Coche);
No se necesita un objeto
Mtodos relevantes
* Type es una clase abstracta, no instanciable. Por tanto, el CLR crea en realidad instancias de la clase derivada de Type RunTimeType.
Accediendo a instancias de RunTimeType, el CLR devuelve referencias del tipo de su clase base Type.
A. P. Visual C# 2010 v.1 113
Indice
Atributos
Los atributos son una forma de incorporar metadatos a un ensamblado, a sus tipos, o miembros.
Hay atributos predefinidos en .NET, y tambin pueden usarse atributos propios.
Los atributos .NET son clases que derivan de la clase base abstracta System.Attribute.
Se aplican atributos a entidades de programacin en el cdigo fuente.
Un atributo se coloca inmediatamente antes de la entidad.
Un atributo consiste de un nombre entre corchetes y una lista de parmetros opcional.
La mayora de atributos aplican solamente a la entidad de programa que le sigue.
Una entidad de programa a la que se aplica un atributo se dice estar adornada o decorada.
Por convencin, los atributos usan la notacin Pascal aadiendo el sufijo Attribute al final: [<nombreAttribute>(<parmetros>)]
namespace WindowsFormsApplication22
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnVer_Click(object sender, EventArgs e)
Ventana del programa {
textBox1.Text = "Altamira";
}
Colocacin en ventana(s) de controles y edicin de sus caractersticas de tamao, private void btnSalir_Click(object sender, EventArgs e)
ubicacin, color, etc, en la Ventana de Propiedades de cada control. {
Close();
}
}
}
Un fichero XAML se compone de un nodo raiz del que cuelgan todos los dems nodos subordinados.
Un nodo es todo lo que se encuentra entre una etiqueta de apertura <Nodo> y una de cierre </Nodo>.
Los atributos son informaciones que se colocan en la etiqueta de apertura, como <Nodo Valor= "222">.
El atributo va seguido de = y el valor entre comillas , incluso para valores numricos, o Boolean.
Si un nodo slo contiene atributos, se puede cerrar el nodo con / al final. Ej. <Nodo Valor = "222"/>.
Los comentarios se hacen con una etiqueta especfica : <! aqui comentarios -->.
Aunque se pueden escribir programas WPF sin usar XAML, combinar XAML y cdigo C#, permite usar :
- XAML para concentrarse en definir la interface grfica del usuario, sus clases y sus propiedades.
- Cdigo C# para definir el comportamiento de los controles ante las acciones del usuario, y otras tareas.
Para una misma clase, tendremos un fichero XAML y otro de cdigo .NET que se funden al compilar.
namespace WpfApplicationTest
{
public partial class MainWindow : Window
{
public MainWindow()
{ InitializeComponent(); }
private void button1_Click(object sender, RoutedEventArgs e)
Con cdigo se programan mtodos en { textBox1.Text = "Altamira"; }
private void button2_Click(object sender, RoutedEventArgs e)
general, en particular los controladores { Close(); }
de eventos, y se generan bucles y tratan }
decisiones lgicas. }