Você está na página 1de 40

Primeros pasos en la

Programacion de C#

C# Basico, II 1
Introduccin a la programacin
con C#
Aplicaciones de consola
(Ver ms en http://en.wikipedia.org/wiki/Console_application )

Una aplicacin de consola es un programa informtico diseado para ser


utilizado a travs de una interfaz slo texto, como la lnea de comandos
de algunos sistemas operativos (Unix, DOS, etc).

Un usuario normalmente interacta con una aplicacin de consola


utilizando slo un teclado y pantalla de visualizacin, en contraposicin a
aplicaciones de interfaz grfica de usuario, que normalmente requieren el
uso de un ratn u otro dispositivo sealador.
...

C# Basico, II 2
Introduccin a la programacin
con C#
Aplicaciones de consola
(Ver ms en http://en.wikipedia.org/wiki/Console_application )

La generacin de aplicaciones de consola se mantiene como una


caracterstica de los entornos de programacin modernos, como el
Framework .NET, en Microsoft Windows Visual Studio, y es porque
simplifica, enormemente, el proceso de
aprendizaje de un nuevo lenguaje de
programacin mediante la eliminacin de las campanillas y lujos
de una GUI.

C# Basico, II 3
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Cdigo fuente

Para la escritura del cdigo fuente se puede usar cualquier editor de texto
ASCII-STD, tal como:

notepad
notepad++ (http://notepad-plus-plus.org/)
...

Una vez escrito el cdigo fuente se procede a grabarlo en el directorio de su


preferencia, preferiblemente uno llamado, algo as como Mi Cdigo C#.
C# Basico, II 4
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Compilacin
Obtener Visual C# <aaaa> Express Edition, ( <aaaa> es el ao. Use la que se
acomode a su mquina ). En
http://www.visualstudio.com/es-es/products/visual-studio-express-vs

Suponiendo qua ya el Framework .NET est instalado, se puede compilar


el cdigo fuente C# de dos maneras:

Utilizando lnea de comando

Creando un proyecto en el IDE de Visual Studio .NET ( 2010 )

Veamos a continuacin el procedimiento


C# Basico, para
II cada una. 5
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Compilacin

Utilizando lnea de comando

Si la variable de entorno fue establecida a la ruta donde se encuentra


el compilador csc.exe, simplemente haga esto, por ejemplo:

D:\Ferreiras2\C#, Mis Codigos C#> csc MiAplicacion.cs

Lo cual generar el archivo MiAplicacion.exe, en el mismo directorio


donde esta el archivo fuente. El archivo MiAplicacion.exe es el MSIL
que procesar el CLR.

C# Basico, II 6
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Ejecucin

Utilizando lnea de comando

En el directorio que sea de inters, copiar el MSIL en el archivo .exe y


ejecutarlo. El CLR se encargar de ejecutar el cdigo intermedio en el
.exe ; As, por ejemplo:

D:\>MiAplicacion <ENTER>

O en este directorio:

D:\Ferreiras2\C#, Mis Codigos C#> MiAplicacion <ENTER>


C# Basico, II 7
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Otras formas de compilacin en lnea de comando

De manera muy resumida, otras forma para compilar el archivo fuente


MiAplicacion.cs son las siguientes:

a) Para generar el archivo MiAplicacin.DLL

csc /target:library MiAplicacion.cs

b) Para compilar sin generar ejecutable, nicamente para comprobar su sintasis.

csc /nooutput MiAplicacion.cs // En el 3.5 no existe

C# Basico, II 8
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Otras formas de compilacin en lnea de comando

c) Para generar Ferrom.exe

csc /out: Ferrom.exe MiAplicacion.cs

d ) Para compilar todos los archivos fuente en el directorio actual generando la


librera Ferreiras.fofi

csc / target:library /out : Ferreiras.fofi *.cs

...

C# Basico, II 9
Introduccin a la programacin
con C#
Produccin de una aplicacin de consola con C#:
Cdigo fuente, compilacin y ejecucin.
Compilacin

Creando un proyecto en el IDE de Visual Studio .NET ( 2010 )

New Project -> Visual C# -> Windows -> Console Application -> Give a
name to the application, Location, Solution name -> OK ->...

C# Basico, II 10
Introduccin a la programacin
con C# Nombre
del archivo
Estructura general de un programa fuente en C# fuente y su
extensin
// Nombre.cs
La sintaxis
de los
using nombreDelEspacio de nombre; comentarios
... es la misma
que en C++
class Nombre { Los namaspace y Java
requeridos
// Test-Driver

public static void Main() { Para esta parte del curso esta
estructura es suficiente. Ms adelante,
// cuerpo de Main(); cuando estemos escribiendo nuestras
clases veremos otra estructura ms
} amplia.
} C# Basico, II 11
Introduccin a la programacin
con C#
El mtodo Main() :

Es el mtodo principal de la aplicacin.


Es el punto de entrada del programa, donde se inicia el control del
programa y termina.
Se declara dentro de una clase o estructura.
Debe ser esttico.
El tipo de retorno puede ser void ( no retorna nada ) o int ( retorna
un entero ) .
Es el test-driver, luego la clase que lo contiene es una tester-class
Es donde se crean objetos e invocar otros mtodos.
El se puede declarar sin parmetros o con parmetros para
argumentos. Esta ltima forma permite a su programa para leer los
argumentos de lnea de comandos.
C# Basico, II 12
Introduccin a la programacin
con C#
El mtodo Main() :

Si no retorna nada

static void Main() {


// ...
}

Si retorna

static int Main() {


// ...
return 0;
}

C# Basico, II 13
Introduccin a la programacin
con C#
El mtodo Main() :

Puede tomar argumentos, en este caso toma una de las siguientes


formas:

static int Main ( string [ ] args ) {


//..

return 0;
}

static void Main( string [ ] args ) {


//...
}

C# Basico, II 14
Introduccin a la programacin
con C#
El mtodo Main() :

El parmetro del mtodo Main() es un arreglo de cadenas ( string [ ] fofi ) que


permite enviarle los argumentos en lnea de comando.

Si Main() se escribe con parmetros, se chequea, usualmente, la existencia


de argumentos en la linea de comando probando la propieda Length. Por
ejemplo:
static int Main ( string [ ] args ) {
if (args.Length == 0) {
Console.WriteLine(\n * Por favor, entre los argumentos);
return 1;
}
}

C# Basico, II 15
Introduccin a la programacin
con C#
El mtodo Main() :
El argumento tipo cadena, que es escrito en lnea de comando, puede ser convertido a
un tipo numrico :

long numero = Int64.Parse( args[0] ); // Convierte el argumento tipo string args[0] a un


valor numrico tipo long.

Tambin es posible usar el tipo long, el cual es un alias de Int64:

long numero = long.Parse( args[0] ); // Convierte el argumento tipo string args[0] a


un valor numrico tipo long.

Tambin es posible usar el mtodo ToInt64 de la clase Convert para hacer lo


mismo:

long numero = Convert.ToInt64( args[0] );

C# Basico, II 16
Introduccin a la programacin
con C#
Salidas y Entradas en C#
La clase Console del namespace System proporciona los mtodos Write() y
WriteLine() para salida y los mtodos Read y ReadLine() para entrada.

Ver en el namespace System, en la clase Console los mtodos Write(),


WriteLine(), Read() y ReadLine():

http://msdn.microsoft.com/es-es/library/System(v=vs.100).aspx

System -> Console -> ...

C# Basico, II 17
Ejemplos

C# Basico, II 18
// Basico0.cs

using System;

class Basico0 {

public static void Main() {

Console.Write("\n\t* Entre su nombre completo: " );


string nombreCompleto = Console.ReadLine();
Console.Write("\n\t* Entre su nombre matricula: " );
long matricula = long.Parse(Console.ReadLine());
Console.WriteLine("\n\t* Su nombre completo suplido fue: {0} ", nombreCompleto );
Console.WriteLine("\n\t* Su matricula suplida fue: {0} ", matricula);
}
}

D:\Ferreiras2\C#, Mis Codigos C#> Basico0

* Entre su nombre completo: Kleto Ferrer

* Entre su nombre matricula: 1234567

* Su nombre completo suplido fue: Kleto Ferrer

* Su matricula suplida fue: 1234567

D:\Ferreiras2\C#, Mis Codigos C#>


C# Basico, II 19
/*
Basico1.cs

El factorial de un numero capturado por stdin

0! = 1, n! = n * (n-1)!
PRECONDICION: numero >= 0 y numero <= 20
POSTCONDICION: numero!

*/

using System;

class Basico2 {

public static void Main() {

// leer un numero como una cadena y convertirlo a tipo long

Console.Write("\n Entre un numero entero positivo: ");


// long numero = long.Parse( Console.ReadLine() );
// long es un alias C# del tipo .NET System.Int64
long numero = System.Int64.Parse( Console.ReadLine() );

/*
Int64 es una estructura del namespace System y Parse es uno de sus metodos para convertir
la representacin en forma de cadena de un nmero en el entero de 64 bits con signo equivalente.
*/
C# Basico, II 20
Basico1.cs - continuacin -

// Calcular e factorial del numero leido

long factorial = 0; // [ -9223372036854775808, + 9223372036854775807 ]

if( numero <= 0 )


factorial = 1;
else if ( numero > 20 ) {
Console.WriteLine("\n ERROR, el factorial resultante es muy grande para el tipo long");
Environment.Exit(0);
/*
Exit es mtodo en la clase Environment del namespace System
Exit termina este proceso y le da al sistema operativo subyacente el cdigo de salida
especificado. l codigo de salida especificado es 0.
*/
}
else if ( numero > 0 && numero <= 20 ) {
factorial = 1;
for ( int i = 1; i < (numero + 1); ++i ) {
factorial = factorial * i ;
}
}
Console.WriteLine("\n El factorial de {0} es {1} ", numero, factorial );
}
}

C# Basico, II 21
Basico1.cs - continuacin -

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 5

El factorial de 5 es 120

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 0

El factorial de 0 es 1

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 1

El factorial de 1 es 1

C# Basico, II 22
Basico1.cs - continuacin -

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 10

El factorial de 10 es 3628800

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 20

El factorial de 20 es 2432902008176640000

D:\Ferreiras2\C#, Mis Codigos C#>

D:\Ferreiras2\C#, Mis Codigos C#> Basico1

Entre un numero entero positivo: 23

ERROR, el factorial resultante es muy grande para el tipo long

C# Basico, II 23
/*
Basico2.cs

Ferreiras / C# / Uso de la clase Math del namespace System

*/

using System;

class Basico0 {

public static void Main() {

Console.Write("\n\t* Entre un numero real: " );


double numero1 = double.Parse( Console.ReadLine() );
Console.Write("\n\t* Entre otro numero real: " );
double numero2 = double.Parse( Console.ReadLine() );
double potencia = Math.Pow( numero1, numero2);
// public static double Pow( double x, double y ) Es un metodo de la clase Math del namespace System.
Console.WriteLine("\n\t* Numero {0} elevado al numero {1} es {2} " , numero1, numero2, potencia );
}

C# Basico, II 24
Basico2.cs - continuacin -

D:\Ferreiras2\C#, Mis Codigos C#> Basico2

* Entre un numero real: 4.56

* Entre otro numero real: 3.4

* Numero 4.56 elevado al numero 3.4 es 173.972444197019

D:\Ferreiras2\C#, Mis Codigos C#> Basico2

* Entre un numero real: 0.000000000045

* Entre otro numero real: 3.45e+02

* Numero 4.5E-11 elevado al numero 345 es 0 <== Explicar este resultado

D:\Ferreiras2\C#, Mis Codigos C#>

C# Basico, II 25
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Un archivo DLL es una biblioteca que contiene el cdigo y los


datos que se pueden utilizar por ms de un programa al mismo
tiempo.

Mediante el uso de un archivo DLL, un programa se puede


modular en componentes separados.

Cada mdulo puede cargarse en el programa principal en tiempo


de ejecucin, si est instalado el mdulo. Dado que los mdulos son
independientes, el tiempo de carga del programa es ms rpido y un
mdulo slo se carga cuando se solicita esa funcionalidad.

C# Basico, II 26
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Las actualizaciones son ms fciles de aplicar a cada mdulo sin


afectar a otras partes del programa.

Con solo importar el namespace ( using nombreNamespace; ) se


puede usar la funcionalidad contenida en el DLL correspondiente.

Promueve la reutilizacin de cdigo.

C# Basico, II 27
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Utiliza menos recursos


Cuando varios programas utilizan la misma biblioteca de funciones, un
archivo DLL puede reducir la duplicacin de cdigo que se carga en el
disco y en la memoria fsica.
Promueve la arquitectura modular
Un archivo DLL ayuda a promover el desarrollo de programas
modulares.
Instalacin e implementacin de las actualizaciones
Cuando una funcin dentro de un archivo DLL necesita una actualizacin
o una revisin, la distribucin y la instalacin de la DLL no requiere el
programa volver a vincular con el archivo DLL.

Ver ms en http://support.microsoft.com/kb/815065/es
C# Basico, II 28
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Creacin del archivo DLL

Cdigo Fuente: Con un editor de texto escribir el cdigo que tendr


la funcionalidad deseada:
using ... ;
...
namespace NombreDeNamespace {
public class NombreClase {
public Tipo nombreMetodo(T par, ... ) {
// cuerpo del mtodo
} // Cierra el metodo
} // Cierra la clase
} // Cierra el namespace

C# Basico, II 29
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Creacin del archivo DLL

Compilar el cdigo fuente del DLL: Usando la opcin de compilacin de


lnea de comando

/target:library Build a library (Short form: /t:library)

Por ejemplo

D:\Ferreiras2\C#, Mi Codigo C#>csc /target:library CapturaSalida.cs

Despus de compilado, si no hay errores, se generar en el mismo directorio


el archivo DLL:

CapturaSalida.DLL
C# Basico, II 30
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Cdigo fuente que usa archivos DLL ( en este caso en Main() )

Incluir los namespace que contienen las funcionalidades a usar:


Por ejemplo:

using System;
using Ferreiras;

// Tester Class
class TesterFerreiras {
// Test-Driver
public static void Main() {
ClasePotencia.miPotencia();
EntradaSalida.metodoES();
}
}

C# Basico, II 31
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

Uso de los archivos DLL en la construccin del mdulo principal, el test-driver.

Compilacin de mdulo principal usando la opcin de compilacin en lnea de


comando: /reference:

Por ejemplo
csc /out:TesterFerreiras.exe /reference:Potencia.dll /reference:CapturaSalida.dll TesterFerreiras.cs

Le informa al compilador el nombre del ejecutable a producir ( TesterFerreiras.exe)


utilizando los DLL indicados y el cdigo fuente que contiene el Main().

Ejecucin

D:\Ferreiras2\C#, Mi Codigo C#>TesterFerreiras

C# Basico, II 32
Introduccin a la programacin
con C#
Modularizacin: namespace, creacin y uso de DLL en C#

A continuacin el proceso completo para construir varios DLL y


construir el .exe que los usa.

Ver informacin adicional en

http://msdn.microsoft.com/en-us/library/3707x96z(v=vs.90).aspx

C# Basico, II 33
Introduccin a la programacin con C#

// Potencia.cs

// Ferreiras / C# / Creacion y uso de .DLL en C#

using System;
namespace Ferreiras {
public class ClasePotencia {
public static void miPotencia() {
Console.Write("\n\t* Entre un numero real: " );
double numero1 = double.Parse( Console.ReadLine() );
Console.Write("\n\t* Entre otro numero real: " );
double numero2 = double.Parse( Console.ReadLine() );
double potencia = Math.Pow( numero1, numero2);
// public static double Pow( double x, double y ) Es un metodo de la clase Math del namespace System.
Console.WriteLine("\n\t* Numero {0} elevado al numero {1} es {2} " , numero1, numero2, potencia );
} // Cierra el metodo
} // Cierra la clase
} // Cierra el namespace

Compilacion:

D:\Ferreiras2\C#, Mi Codigo C#> csc /target:library Potencia.cs

C# Basico, II 34
Introduccin a la programacin con C#
// CapturaSalida.cs

// Ferreiras / C# / Creacion y uso de .DLL en C#

using System;

namespace Ferreiras {
public class EntradaSalida {
public static void metodoES( ) {
Console.Write("\n\t* Entre su nombre completo: " );
string nombreCompleto = Console.ReadLine();
Console.Write("\n\t* Entre su nombre matricula: " );
long matricula = long.Parse(Console.ReadLine());
Console.WriteLine("\n\t* Su nombre completo suplido fue: {0} ", nombreCompleto );
Console.WriteLine("\n\t* Su matricula suplida fue: {0} ", matricula);
} // Cierre del metodo
} // Cierre de la clase
} // Cierre del namespace

Compilacin:

D:\Ferreiras2\C#, Mi Codigo C#> csc /target:library CapturaSalida.cs

C# Basico, II 35
Introduccin a la programacin con C#
// TesterFerreiras.cs

using System;
using Ferreiras;

// Tester Class

class TesterFerreiras {

// Test-Driver

public static void Main() {

ClasePotencia.miPotencia();
EntradaSalida.metodoES();
}
}

Compilacin:

D:\Ferreiras2\C#, Mi Codigo C#> csc /out:TesterFerreiras.exe /reference:Potencia.dll


/reference:CapturaSalida.dll TesterFerreiras.cs

C# Basico, II 36
Introduccin a la programacin con C#
Ejecucin de la aplicacin TesterFerreiras generada:
D:\Ferreiras2\C#, Mi Codigo C#> TesterFerreiras

* Entre un numero real: 4.23

* Entre otro numero real: 3.33

* Numero 4.23 elevado al numero 3.33 es 121.818549312174

* Entre su nombre completo: Euclides Kleto Ferrerer Sanchez

* Entre su nombre matricula: 1234567

* Su nombre completo suplido fue: Euclides Kleto Ferrerer Sanchez

* Su matricula suplida fue: 1234567

D:\Ferreiras2\C#, Mi Codigo C#>

C# Basico, II 37
Referencias
The C# Programming Language; Anders Hejlsberg, Scott Wiltamuth, Peter Golde; Microsoft
.NET Development Series; Addison-Wesley Professional, Pearson Education, Inc., Third
Edition, 2004

Types (C# Programming Guide)


http://msdn.microsoft.com/en-us/library/ms173104.aspx

C# Concisely; Judith Bishop, Nigel Hospool; Pearson, Addison Wisley 2003.

Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; OReilly Media, 2010.

Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodrguez Gmez-Stern, Marcos
Antonio Besteiro Gorostizaga; McGra2-Hill/Interamericana de Espaa, S.A.U., 2002.

Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx...

C# Basico, III 38
Referencias
C# Concisely; Judith Bishop, Nigel Hospool; Pearson, Addison Wisley 2003.

Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; OReilly
Media, 2010.

Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodrguez Gmez-Stern,


Marcos Antonio Besteiro Gorostizaga; McGra2-Hill/Interamericana de Espaa,
S.A.U., 2002.

Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx
...

C# Basico, II 39
Agradecimientos
Agradecimientos especiales al
Maestrsimo Felix Ferreiras por el aporte
de este valioso material para poder
impartir este curso.
Gracias maestro!!!

Você também pode gostar