Hola Mundo en C#
Hola Mundo en C#
Hola Mundo en C#
Introduccin a C#
Introduccin a C#
lugar, llama al mtodo Main() de la clase Hola sin haber creado ningn
objeto de esta clase.
El mtodo Main()simplemente ejecuta la lnea:
System.Console.WriteLine("Hola Mundo");
Comentarios
La estructura de los comentarios es la misma que en C, C++ y Java.
Los caracteres // hacen que la lnea que preceden sea un comentario.
Para crear un comentario de varias lneas, basta con encerrar entre los smbolos /* y */
el comentario.
Compilacin y ejecucin.
Se puede compilar un programa de dos modos:
-
2/31
Introduccin a C#
Figura 2.1
c) Ejecutar el programa:
3/31
Introduccin a C#
Hola
Figura 2.2
e) Para compilar todos los ficheros C# del directorio actual con optimizacin y
definiendo el smbolo DEBUG, generando como salida Ejemplo2.exe.
csc /define:DEBUG /optimize /out: Ejemplo2.exe *.cs
f) Para compilar todos los ficheros C# del directorio actual generando una versin
debug de Ejemplo2.dll. No se mostrarn mensajes informativos durante la
4/31
Introduccin a C#
g) Para compilar todos los ficheros C# del directorio actual generando la librera
Pepe.xyz, que es realmente una dll.
csc /target:library /out:Pepe.xyz *.cs
5/31
Introduccin a C#
6/31
Introduccin a C#
7/31
Introduccin a C#
8/31
Introduccin a C#
9/31
Introduccin a C#
10/31
Introduccin a C#
g) Ficheros Fuente:
-Fichero fuente: Class1.cs.
-Fichero informacin sobre el assembly: AssemblyInfo.cs.
-Fichero de proyecto: ConsoleApplication1.csproj.
-Etc...
h) Ficheros objeto, en la carpeta obj: Aunque esta carpeta se genera para un
proyecto en C#, realmente no es necesaria, ya que el compilador a IL no genera
ficheros objeto, sino que crea directamente el .exe o .dll especial de la
plataforma .NET.
a. Versin Debug.
b. Versin Release.
i) Ficheros binarios en cdigo IL(carpeta bin):
a. Versin Debug.
b. Versin Release.
Entradas y salidas
a) WriteLine()
11/31
Introduccin a C#
b) ReadLine()
La clase Console proporciona dos mtodos bsicos para introducir datos por teclado
desde la consola. Dichos mtodos son Read() y ReadLine() y tienen la siguiente
estructura.
int Read();
string ReadLine();
Cuando el programa llega a la lnea que contiene cualquiera de estos dos mtodos,
simplemente espera a que el usuario introduzca una cadena y pulse INTRO.
Los siguientes ejemplos muestran la idea explicada:
12/31
Introduccin a C#
//Fichero EntradaSalida.cs
/*En este programa se pide el nombre al usuario y se
devuelve un saludo*/
using System;
class EntradaSalida
{
public static void Main()
{
Console.Write("Buenos das. Deme su nombre");
string unaCadena = Console.ReadLine();
Console.WriteLine("Aprender C# en seguida Sr. {0}",unaCadena);
}
}
//Fichero ClaseCirculo
//Calculo del area de un crculo pidiendo el radio por consola
using System;
class ClaseCirculo
{
public static void Main()
{
Console.Write("Dame el radio del crculo");
int radio = Console.Read();
float area = 3.14*radio*radio;
Console.WriteLine("El area del circulo
de radio {0} es {1}",radio, area);
}
}
ReadLine()devuelve una cadena formada por los caracteres introducidos por el teclado
hasta que se pulsa la tecla INTRO. Se devuelve una cadena en la que se ignoran los
caracteres correspondientes al salto de lnea y al retorno de carro.
Read() devuelve un entero correspondiente al carcter de la tecla pulsada. Tambin
espera a que se pulse la tecla INTRO. En este caso es conveniente decir que una vez
pulsado INTRO, se quedan en el buffer de entrada los caracteres correspondientes al
salto de lnea y al retorno de carro. Si se deseara utilizar este mtodo de nuevo, habra
que limpiar el buffer de entrada. Puede hacerse de varias maneras, pero quiz dos
formas simples son las que se indican a continuacin:
a) Ejecutar Console.ReadLine().
b) Ejecutar dos veces Console.Read().
public
public
public
public
static
static
static
static
void Main()
int Main()
void Main(string[] args)
int Main(string[] args)
Las dos primeras se utilizan cuando no se desea pasar a la aplicacin ningn argumento.
Se diferencian entre ellas en el valor devuelto. Cuando concluye la aplicacin, en la
13/31
Introduccin a C#
b) A continuacin, se compila:
csc ClasePrueba.cs.
0
1
2
3
es
es
es
es
Miguel
23
67.89
HolaMundo
14/31
Introduccin a C#
.
Console.WriteLine(Hola Mundo);
Para incluir una clase o un tipo de dato en un determinado namespace, basta con
incluirla entre llaves despus del nombre del namespace. Por ejemplo, para incluir la
clase Hola en el namespace MisClases:
using System;
namespace MisClases
{
class Hola
{
public static void Main()
{
Console.WriteLine("Hola Mundo");
}
}
}
15/31
Introduccin a C#
Unidades de Compilacin.
Una unidad de compilacin consiste en cero o ms directivas using seguidas de cero o
ms declaraciones de namespace.
Un programa C# consiste en una o ms unidades de compilacin, cada una en un fichero
fuente separado. Cuando un programa C# es compilado, todas las unidades de
compilacin se procesan juntas. Por tanto, las unidades de compilacin pueden
depender entre si.
Si no se indica un namespace concreto, los miembros de una unidad de compilacin
pertenecen al namespace global.
Declaracin de namespaces.
Una declaracin de namespace consiste en la palabra clave namespace seguida de un
nombre de namespace y un cuerpo, seguido opcionalmente por un ; .
Las declaraciones de varios namespace se pueden anidar entre s.
Por ejemplo:
namespace N1.N2
{
class A {}
class B {}
}
Es equivalente semnticamente a:
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
16/31
Introduccin a C#
Ejemplo:
using System;
namespace AlgunEspacioDeNombres
{
public class MiClase
{
public static void Main()
{
EspacioCaja.ClaseDelEspacioCaja.DecirHola();
}
}
namespace EspacioCaja
{
public class ClaseDelEspacioCaja
17/31
Introduccin a C#
{
public static void DecirHola()
{
Console.WriteLine("Hola");
}
}
}
}
Anexo
Diferencias entre el compilador de C# y C++.
Como se ha comentado, el compilador de C# no genera ficheros .obj, sino que crea
directamente los ficheros .exe o .dll. Como consecuencia de esto, el compilador de C#
no necesita el enlazador o linker.
Se puede apreciar en el men Generar que no existe la pareja de opciones Compilar y
Generar, sino nicamente Generar, debido a que ya no es necesario compilar para
generar los ficheros objeto y luego construir para enlazar los ficheros objeto con el resto
de libreras. Ahora se construye directamente el assembly con el cdigo intermedio
MSIL.
18/31
Introduccin a C#
19/31
Introduccin a C#
Figura 2.15
Figura 2.16
Figura 2.17
Introduccin a C#
ClaseAdicion.cs
// Suma dos nmeros
using System;
namespace MiLibreria
{
public class ClaseAdicion
{
public static long Sumar(long i, long j)
{
return(i+j);
}
}
}
ClaseMultip.cs
// Multiplica dos nmeros
using System;
namespace MiLibreria
{
public class ClaseMultip
{
public static long Multiplicar(long x, long y)
{
return (x*y);
}
}
}
MiAplicacion.cs
using System;
using MiLibreria ;
class MiAplicacion
{
public static void Main(string[] args)
{
Console.WriteLine("Llamando a mtodos desde MiLibreria.dll:");
if (args.Length != 2)
21/31
Introduccin a C#
{
Console.WriteLine("Introducir: <num1> <num2>");
return;
}
long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]);
long suma = ClaseAdicion.Sumar(num1, num2);
long producto = ClaseMultip.Multiplicar(num1, num2);
Console.WriteLine("La suma de {0} y {1} es {2}",
num1, num2, suma);
Console.WriteLine("El producto de {0} y {1} es {2}",
num1, num2, producto);
}
}
Para indicar que en la clase MiAplicacion se van a utilizar los mtodos de las clases
ClaseAdicion y ClaseMultip hay que importar el namespace que contiene las clases,
no la dll (el assembly) en la que se almacenarn. Esto es muy importante, porque
reduce la utilizacin de una clase a una referencia lgica, evitando el engorro y los
problemas de versiones que supone tener que importar y exportar mtodos de una dll
concreta.
Compilacin y ejecucin.
a) Compilacin desde la lnea de comando.
Para crear la librera MiLibreria.dll se ha de ejecutar la siguiente lnea de comando:
csc /target:library /out:MiLibreria.dll ClaseAdicion.cs ClaseMultip.cs
22/31
Introduccin a C#
Figura 2.18
c) Compilacin desde el Visual Studio 7.0.
Para crear la dll desde Visual Studio 7.0 se ha de crear un nuevo proyecto de tipo
Biblioteca de Clases (figura 2.19):
23/31
Introduccin a C#
Figura 2.20
Para aadir una nueva clase se puede hacer desde Proyecto/Agregar Clase,
y se obtiene la ventana de configuracin de la figura 2.21.
24/31
Introduccin a C#
Figura 2.21
A continuacin se codifica su funcionalidad:
25/31
Introduccin a C#
Figura 2.22
La misma operacin se ha de repetir para la clase ClaseMultip.
Tras haber creado ambas clases, slo resta construir la dll (Generar/Generar).
El resultado ser el de la figura 2.23:
Figura 2.23
Donde la librera se encontrar en el directorio MiLibreria\bin\debug.
Figura 2.24
d) Creacin de MiAplicacion.exe.
Slo falta crear MiAplicacion.exe, que es el cliente que va a utilizar la dll. Se ha de
tener en cuenta que el espacio de nombres de las clases que hay en la dll se llama
MiLibreria. Se siguen los pasos que se indican en las figuras 2.25 y 2.26.
26/31
Introduccin a C#
27/31
Introduccin a C#
Para poder utilizar las clases ClaseAdicion y ClaseMultip no basta con aadir la lnea
using MiLibreria al cdigo fuente. Adems se ha de aadir la referencia a la librera a
travs de la opcin de men Proyecto/Agregar referencia.
28/31
Introduccin a C#
Figura 2.28
Figura 2.29
Tras este paso ya se puede construir el ejecutable.
29/31
Introduccin a C#
Si se ejecuta, se indicar que han de pasarse dos argumento. Es lo nico que falta para
poder probar este ejemplo.
Para indicar que se desea pasar argumentos de lnea de comando al ejecutable cuando se
pruebe, han de seguirse los pasos que se indican a continuacin:
Figura 2.30
Figura 2.31
30/31
Introduccin a C#
Figura 2.33
31/31