Sei sulla pagina 1di 6

Introduccin a C# Por: Demian C.

Panello Captulo I Indice rpido del captulo 1:

demianpanello@yahoo.com.ar

Hola C#! Formato de la salida por pantalla. Ingreso de datos por teclado. Operadores. Precedencia de los operadores, (tabla). Estructuras de control y comparacin. Tipos de datos. Tipo valor. Tipo referencia. Empaquetado y desempaquetado.

Requerimientos: En principio es importante saber cuales son los requerimientos mnimos para programar con C#, (o con cualquier lenguaje .NET), tome nota:

Micro: de 500 mhz o superior.. Memoria: mnima 64 mb, recomendada 128. Espacio libre en disco: aprox. 300 mb, (slo el Framework) y 2 GB (incluyendo el IDE y herramientas). Sistema operativo: Windows XP, Windows 2000, Windows NT 4.0 o Workstation, slo esos. y muchas ganas de programar.
Exigente no?. Y bueno, ahora no slo los juegos exigen a la mquina. Tambin es verdad que para programar en C# no vamos a necesitar del IDE, con que slo baje el Framework desde el sitio de Microsoft, listo, (si tiene banda ancha podr bajarlo porque si no deber buscarlo en algn otro lugar). En mi caso, he usado por mucho tiempo el Notepad, (y un editor para DOS llamado E3), para escribir la mayora de los ejemplos que ver a partir de aqu, aunque ahora tengo instalada una versin Beta, (la 2), de Visual Studio .NET que fue distribuida por una publicacin local. Seguramente es mucho ms cmodo usar el IDE porque colorea la sintaxis y tiene Intellisense, pero confe en mi, escriba al principio los programas con el Notepad para luego compilarlo desde la lnea de comandos y se familiarizar ms rpido con la sintaxis; luego s pase a usar el IDE. Hola C#! En caso que slo haya instalado el Framework, cuando escriba un programa y quiera probarlo, deber abrir una ventana al DOS, (una ventana de Consola), ubicarse en el directorio donde est el archivo fuente y usar el compilador de C#, (csc.exe). Tenga presente que los programas fuentes deben tener la extensin .cs. Abra el Notepad o cualquier editor de texto que le agrade porque sin ms prembulos comenzaremos a programar en C#, escribiremos el clsico Hola mundo, (est vez ser Hola C#!). using System; (1) namespace Demian (2) { class miClase (3) { public static void Main() (4) {

Console.WriteLine("Hola C#!"); (5) } } } Guarde el archivo con el nombre hola y con extensin .cs, (OJO! que el Notepad slo guarda por defecto con extensin .txt), y en la lnea de comandos escriba: csc hola.cs Si todo est bien, esto genera un archivo .exe, sino informar los errores y en que nmero de lneas ocurrieron. En (1) se indica que namespace se usar por medio de la clusula using. En nuestro caso usamos el namespace System que contiene los objetos necesarios para declarar variables, imprimir texto por pantalla, ingresar por teclado, etc. Se pueden especificar tantos using como namespaces se incluyan, (es similar a #include de C++). En la lnea (2) se indica a que namespace pertenece este programa, (en realidad clase, como ver en la lnea 3), y esto puede ser optativo. Segn Microsoft, el nombre que del namespace debera ser el nombre de la empresa que desarroll el programa o las clases, as que opt por usar mi nombre. Como todo en C# es un objeto, (absolutamente TODO), nuestro programa en s es un objeto, as que por eso en (3) definimos una clase, (el nombre debera ser ms descriptivo que el que le puse) y de all en adelante escribiremos cdigo para funciones miembro y agregaremos datos miembros a esta clase. La lnea (4) es el punto de entrada del programa, que es precisamente un mtodo pblico y esttico de la clase principal. El mtodo Main() puede recibir parmetros, en caso que esperramos que al ejecuter el programa tambin se incluyan algunos parmetros desde la lnea de comando, (tambin puede retornar algo diferente a void). La lnea (5) usa el objeto Console para acceder al mtodo sobrecargado WriteLine() que imprime el txto pasado como parmetro y realiza un salto de lnea y retorno de carro. Hay varias versiones de WriteLine(), (19 para ser preciso), muchas de ellas permiten, en el primer parmetro, especificar el formato de variables a imprimir junto con el texto, (como printf() de C). Suponga que tiene las variables enteras var1, var2 y var3 y desea imprimir un texto como: "var1 = ... y var2= ... y el var3= ...". Debera escribir la siguiente lnea de cdigo: Console.WriteLine("var1= {0} y var2={1} y var3={3}", var1, var2, var3); Intercalando {n} en el texto puede ir dandole formato a las variables, donde n es el orden de las variables en la lista de variables pasadas por parmetro a la funcin. Supongamos que seguimos teniendo las variables enteras var1, var2 y var3, si desea imprimir el valor de var2 en base hexadecimal y con 4 dgitos debera escribir: Console.WriteLine("var2={0:x4}", var2); As como tiene x para hexadecimal, puede colocar d para decimal y o para octal. Tenga en cuenta que al usar la sentencia using System; nos ahorramos de escribir: System.Console.WriteLine(...); Porque Console es una clase de System. Pero no puede hacer lo siguiente: using System.Console; para luego escribir: WriteLine(....); Porque Console es una clase de System no un namespace, slo puede especificar namespaces anidados en la clusula using.

Ejemplo 2: Veamos un ejemplo en el cual el programa contina en ejecucin slo si se ingresa el nmero 5 o el 8. Cree un nuevo archivo .cs y escriba: using System; namespace Demian { class Class1 { public static void Main(string[] args) { int a; (1) string dato; (2) Console.Write("Ingrese valor de a: "); (3) dato=Console.ReadLine(); (4) a=int.Parse (dato); (5) while (a==8 || a==5) (6) { Console.Write("Ingrese valor de a: "); dato=Console.ReadLine(); a=int.Parse (dato); } Console.WriteLine ("Se termino."); int buff =Console.Read (); (7) } } } Aqu hay varias cosas interesante para analizar. Ingreso de datos por teclado: En la lnea (4), (y ms adelante tambin), se usa la funcin ReadLine() la cual devuelve una cadena de lo ingresado por teclado. O sea que si ingreso el nmero 156 en realidad en la variable dato, que es de tipo string, se almacen "156". Con Console.ReadLine(), entonces, puede leer un ingreso de cadena por teclado y automticamente hace el salto de lnea y retorno de carro. Por otro lado la funcin Console.Read(), (ver lnea 7), devuelve el ltimo caracter ingresado y en el programa de ejemplo es usada para detener la ejecucin antes de que termine, as, si ha sido ejecutado desde el entorno de Visual Studio se puede apreciar el final del ejemplo en ejecucin, (como una pausa hasta que pulse ENTER). Justamente a raz de que el valor devuelto por ReadLine() es una cadena, en (5), convertimos el el contenido de la variable string dato a entera almacenandolo en una variable int llamada a. Para la conversin se usa la funcin Parse() que es un mtodo del objetos int, (en realidad de System.Int32), pero eso lo veremos ms abajo. Por ahora confe que Parse() convierte una cadena a entero y despues veremos como es posible que un tipo de dato como int tenga mtodos. Operadores: Ver en la lnea (6), dentro de la expresin evaluada por la estructura while, dos caracteres "pipe" |, estos dos caracteres significan, como en C/C++, el operador lgico OR. C# comparte todos los operadores de C/C++ y agrega algunos otros. Y como en todos los lenguajes los distintos operadores tienen una precedencia en una expresin, o sea, un orden de prioridad para ser tratados por el compilador cuando analiza una lnea con mltiples operadores.

Tabla de precedencia de operadores: Tipo de operador Primario Unitario Multiplicativo Aditivo De desplazamiento Relacional De igualdad AND a nivel de bits XOR a nivel de bits OR nivel de bits AND condicional OR condicional Condicional De asignacin Operadores (a), a.b, f(a), a[i], a++, a--, new, typeof, sizeof, checked, unchecked +,-, !, ~, ++a, --a, (cast)a *, /, % +, <<, >> <, >, <=, >=, is == & ^ | && || ?: =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

No har ms hincapi en los operadores, ya que la mayora son iguales a los de C/C++, en su momento veremos detalladamente el uso de typeof, checked, etc. Estructuras de control y comparacin: Como C# est basado en la sintaxis de C/C++, tambin comparte todas las estructuras de control y comparacin, aunque modifica sutilmente algunas y agrega otra.

While, Do - while:
En nuestro ejemplo usamos el ciclo while, exactamente igual como si lo usaramos en C, lo mismo pasa con la estructura do - while. while (condicin) { ....; ....; } do { ...; ...; } while (condicin);

El ciclo For:
Igual que en C. for(inicio, condicin, incremento) { ...; ...; }

El ciclo Foreach:
Este ciclo es similar al que tiene Visual Basic, (VB tradicional), especialmente diseada para iterar sobre

arreglos y colecciones. foreach(tipo in expresion) { ...; ...; } Luego veremos varios ejemplos con foreach, ya que es muy til.

Instrucciones if y switch:
Las dos son exactamente iguales, por lo menos sintcticamente, que en C, la nica diferencia es que ahora usando switch estamos obligados a colocar la instruccin break en cada case, sino el compilador nos informar un error. Con esto prevenimos errores en tiempo de ejecucin producto de la omisin de break.

if (condicin) { ...; ...; } else { ...; ...; }

switch (condicin) { case valor1: ....; ....; break; case valor2: ...; ...; break; default: ...; }

Tipos de datos: En .NET todo es un objeto, y esto se aplica tambin a los tipos de datos, puesto que el Common Type System, (CTS), define todos los tipos como clases descendientes de System.Object, (en realidad todo desciende de aqu). No obstante los tipos se dividen en tipos valor y tipos referencia.

Tipo valor:
Cuando se define una variable que almacena datos reales, (como enteros, flotantes, dobles, etc), se dice que esta variable es de tipo valor y que nunca podr almacenar un valor null. El CTS tiene una serie de objetos, con una alias ms intuitivo, que permite declarar variables de tipo valor. int a = 50; En la lnea anterior se ha declarado una variable a de tipo System.Int32, (usamos el alias int de C#, pero se podra haber escrito System.Int32 a = 50). En esta declaracin se ha reservado un espacio de 32 bits en la pila; o sea que, a pesar de que System.Int32 es una clase derivada de System.Object, no existi la necesidad de instanciar un objeto en el monton, (heap). En C# los tipos primitivos, (int, float, double, etc), los enumeradores y las estructuras son tipos valor.

Tipo referencia:
Los tipo referencia son similares a las referencia de C++, en el sentido que son punteros de tipo seguro, o sea que adems de ser una direccin a donde apunta, (o para peor con punteros: donde uno cree que apunta), con la referencia se garantiza que apunta al objeto previamente referenciado. El siguiente ejemplo declara una variable de tipo System.String, que lo que en realidad hace es reservar

espacio suficiente en el montn para la cadena y devolver una referencia a sta, (o a ese espacio reservado). string cadena = "Soy una cadena en el montn"; //string es una alias de C# //para System.String En C# las clases, arrays, delegados e interfaces son tipos referencia. Tabla de tipos y alias. Tipo del CTS System.Object System.String System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64 System.Char System.Single System.Double System.Decimal System.Boolean Alias en C# object string sbyte byte short ushort int uint long ulong char float double decimal boolean Descripcin Clase base para todos los tipos. Cadena. Byte con signo de 8 bits. Byte sin signo de 8 bits. Entero de 16 bits con signo. Entero de 16 bits sin signo. Entero de 32 bits con signo. Entero de 32 bits sin signo. Entero de 64 bits con signo. Entero de 64 bits sin signo. Caracter unicode de 16 bits. Real de 32 bits. Real de 64 bits. Real de 128 bits. Valor booleano: true o false.

Empaquetado y desempaquetado (boxing y unboxing): La tcnica de empaquetado y desempaquetado permite que un objeto sea un objeto cuando lo necesite. Por ejemplo, cuando declara una variable de tipo System.Int32, (int para C#), se reserva memoria en la pila y puede pasar esta variable a cualquier mtodo que espere un parmetro System.Object y acceder a los mtodos del mismo. int var1 = 50; //tipo valor. object var2 = var1; //tipo referencia, se empaqueta la variable. Teniendo a var1, (que es una variable de tipo valor), copiada en var2, tenemos una referencia, (lease, un puntero seguro), a nuestra var1. Para volver a convertir a var2 a un tipo valor hay que aplicar una conversin explcita o CAST: int var1 = 50; object var2 = var1; int var3 = (int) var2; //variable de tipo valor. //se empaqueta la variable. //se desempaqueta obteniendo nuevamente un tipo valor.

Para empaquetar no hace falta una conversin explcita pero para desempaquetar s porque el compilador no puede discernir cul ser el tipo valor a obtener.

Potrebbero piacerti anche