Documentos de Académico
Documentos de Profesional
Documentos de Cultura
HolaMundoConCSharp PDF
HolaMundoConCSharp PDF
class Hola
{
public static void Main()
{
/* WriteLine es un mtodo de la clase Console,
la cual se encuentra en el namespace System.
Estas lneas son tambien un comentario*/
System.Console.WriteLine("Hola Mundo");
}
}
a) En C# todo el cdigo debe estar situado dentro de una o varias clases. Este
primer programa tiene una nica clase Hola- que a su vez contiene un nico
mtodo Main()-. Un mtodo no es ms que un conjunto de instrucciones que
sern ejecutadas cada vez que el mtodo sea invocado.
b) El fichero de cdigo fuente puede llamarse con el mismo nombre que la clase
que contiene el mtodo Main()-como sucede en Java- o con otro distinto. En
este libro muchas veces se har as. Los ficheros fuente tienen la extensin .cs
de C Sharp-.
c) Main() se escribe con maysculas. C# es sensible a las maysculas.
d) El mtodo Main() es un miembro de la clase Hola, y es especialmente
importante porque es el punto de entrada del programa, el mtodo que se ejecuta
en primer lugar. Tiene tres palabras que le preceden:
a. void indica que este mtodo no devuelve nada. La palabra
inmediatamente anterior a un mtodo, indica el tipo de dato que devuelve
el mtodo Main().
b. public: con este modificador se indica que este mtodo es pblico y que
por lo tanto puede ser llamado desde el cdigo de cualquier clase. En C#
-al contrario de lo que sucede en Java- cuando se omite este modificador,
el mtodo es privado, que significa que dicho mtodo slo puede ser
llamado por el cdigo de la propia clase en la que est definido el
mtodo.
c. static: indica que Main() es un mtodo de clase o esttico, es decir,
que puede ser invocado sin necesidad de crear un objeto de la clase Hola.
Realmente, cuando se ejecuta el programa, el compilador, en primer
1/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
lugar, llama al mtodo Main() de la clase Hola sin haber creado ningn
objeto de esta clase.
La librera de .NET tiene definidas muchas clases que el programador puede utilizar.
Una de ellas es la clase Console que proporciona algunos mtodos de entrada/salida por
consola. Uno de los mtodos de salida de la clase Console es el mtodo WriteLine().
WriteLine() es un mtodo esttico y por eso se invoca a travs del nombre de la clase.
El mtodo WriteLine() muestra por la consola o lnea de comandos la cadena que se le
pasa como parmetro, aadiendo un salto de lnea y un retorno de carro. Si se desea no
aadir el salto de lnea ni el retorno de carro se puede utilizar otro mtodo de la clase
Console denominado Write().
Comentarios
Compilacin y ejecucin.
Se puede compilar un programa de dos modos:
2/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.1
c) Ejecutar el programa:
3/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Hola
Figura 2.2
csc Ejemplo.cs
e) Para compilar todos los ficheros C# del directorio actual con optimizacin y
definiendo el smbolo DEBUG, generando como salida Ejemplo2.exe.
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
Marco Besteiro y Miguel Rodrguez Introduccin a C#
g) Para compilar todos los ficheros C# del directorio actual generando la librera
Pepe.xyz, que es realmente una dll.
5/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
6/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Este es un buen momento para dar nombre al proyecto (caja de textos Nombre) y decidir
el lugar en el que ser almacenado (caja de texto Ubicacin). En este ejemplo se
dejarn los valores que el programa propone por defecto. El resultado ser el de la
figura 2.6:
Se crea una clase Class1, que es la que debe implementar la funcionalidad y que posee
un mtodo Main() y un constructor (figura 2.6). Como se ve, la estructura mnima que
se ofrece es una clase, ya que la filosofa C# para .NET es trabajar nicamente con
clases, no con funciones ni variables globales.
7/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
8/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
9/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
10/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
g) Ficheros Fuente:
-Fichero fuente: Class1.cs.
-Fichero informacin sobre el assembly: AssemblyInfo.cs.
-Fichero de proyecto: ConsoleApplication1.csproj.
-Etc...
a. Versin Debug.
b. Versin Release.
a. Versin Debug.
b. Versin Release.
Entradas y salidas
a) WriteLine()
11/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
WriteLine() en un mtodo esttico que no devuelve nada y que escribe el o los datos
que especifica en su argumento seguido de un retorno de carro y salto de lnea al final.
Es un mtodo que est sobrecargado y puede tener como argumento un dato de
cualquier tipo. Adems puede tener varios argumentos y es relativamente sencillo dar
formato a la salida. Las posibilidades para escribir los datos son muchas. Aqu slo se
harn algunas consideraciones de una de las ms importantes:
Por ejemplo: escriba este cdigo en el mtodo Main() del programa anterior.
int unEntero = 7;
string unaCadena = "Hola Mundo";
double unDouble = 6.86;
Console.WriteLine("Mi frase es {0}",unaCadena);
Console.WriteLine("var1={0} var2={1} var3={2}",
unEntero,unDouble,unaCadena);
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.
12/31
Marco Besteiro y Miguel Rodrguez 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.
a) Ejecutar Console.ReadLine().
b) Ejecutar dos veces Console.Read().
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
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Es posible declarar el mtodo Main() para que reciba los valores que se deseen pasar a
la aplicacin. Para ello, se utilizan las dos formas siguientes de Main(). Se diferencian
en lo mismo que las anteriores: una devuelve un entero y la otra nada. Sin embargo,
Main() tiene como parmetro un array de string o cadenas. Cada uno de los valores
que se le pasan a la aplicacin se almacenan de manera consecutiva en los elementos del
array.
El ejemplo siguiente refleja bien esta idea. Se trata de imprimir los parmetros que se
pasan a la aplicacin. Para ello se siguen los pasos que se indican a continuacin.
//Fichero ClasePrueba.cs
using System;
class ClasePrueba
{
static void Main(string[] args)
{
for(int i=0;i<args.Length;i++)
Console.WriteLine("Argumento {0} es {1}",i,args[i]);
}
}
b) A continuacin, se compila:
csc ClasePrueba.cs.
14/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
a) Llamar a la clase directamente. Para ello, hay que llamarla con el nombre de la
clase, precedida del nombre del namespace donde est incluida y separadas por
el operador punto (.):
System.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
Marco Besteiro y Miguel Rodrguez 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.
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 ; .
Por ejemplo:
namespace N1.N2
{
class A {}
class B {}
}
Es equivalente semnticamente a:
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
16/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Ejemplo:
namespace N1.N2
{
class A {}
}
namespace N3
{
using R1 = N1;
using R2 = N1.N2;
class B
{
N1.N2.A a; // referencia a la clase N1.N2.A
R1.N2.A b; // referencia a la clase N1.N2.A
R2.A c; // referencia a la clase N1.N2.A
}
}
Ejemplo:
namespace N1.N2
{
class A {}
}
namespace N3
{
using N1.N2;
class B: A {}
}
Ejemplo:
using System;
namespace AlgunEspacioDeNombres
{
public class MiClase
{
public static void Main()
{
EspacioCaja.ClaseDelEspacioCaja.DecirHola();
}
}
namespace EspacioCaja
{
public class ClaseDelEspacioCaja
17/31
Marco Besteiro y Miguel Rodrguez 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.
Para ello se utiliza el programa ildasm.exe suministrado con Visual Studio (figura
2.12):
18/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
19/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.15
Figura 2.16
Figura 2.17
20/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
ClaseAdicion.cs
ClaseMultip.cs
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
Marco Besteiro y Miguel Rodrguez 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.
MiAplicacion 100 25
22/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.18
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
Marco Besteiro y Miguel Rodrguez 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
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.21
25/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.22
Tras haber creado ambas clases, slo resta construir la dll (Generar/Generar).
Figura 2.23
Figura 2.24
d) Creacin de MiAplicacion.exe.
26/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
27/31
Marco Besteiro y Miguel Rodrguez 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.
Esta opcin muestra un cuadro de dilogo en el que se puede elegir la o las libreras que
se van a referenciar desde el proyecto (figuras 2.27, 2.28 y 2.29).
28/31
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Figura 2.28
Figura 2.29
29/31
Marco Besteiro y Miguel Rodrguez 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
Marco Besteiro y Miguel Rodrguez Introduccin a C#
Tras este paso slo resta ejecutar el proyecto y ver el resultado (figura 2.33).
Figura 2.33
31/31