Antes de nada, quiero que sepas que hasta ahora soy programador de Visual Basic, y la curiosidad me ha llevado a interesarme por el nuevo C#, de modo que, básicamente, me vas a acompañar durante todo mi proceso de aprendizaje. No es que vaya a escribir cosas sin estar seguro de ellas, estoy bien documentado, sino que puede que encuentres algo de código que, con el tiempo, te des cuenta de que se podía haber mejorado.

Te diré que, poco a poco, C# ha ido superando con creces todas mis expectativas: es un lenguaje moderno, potente, flexible y orientado a objetos. No te puedo decir nada comparándolo con Java ni con C++, porque, básicamente, tengo muy poquita idea de cómo son estos lenguajes. No obstante, sí te puedo decir que, en una de mis muchas incursiones por la web en busca de información sobre este lenguaje encontré el siguiente párrafo:

“Muchos dicen que si Java se puede considerar un C++ mejorado en cuestiones de seguridad y portabilidad, C# debe entenderse como un Java mejorado en todos los sentidos: desde la eficiencia hasta la facilidad de integración con aplicaciones tan habituales como Microsoft Office o Corel Draw.” (El rincón en español de C#, http://manowar.lsi.us.es/~csharp/)

Por lo poco que yo sé sobre Java y C++, y lo que he leído en diversa documentación, creo que esta descripción se ajusta bastante a la realidad. Lo que sí te puedo asegurar con toda certeza es que C# combina la rapidez de desarrollo de Visual Basic con la enorme capacidad bruta de C++.

Método a seguir durante todo el curso

Empezaremos con una breve introducción a la programación orientada a objetos y la tecnología .NET, y posteriormente iremos ya con la programación en C# propiamente dicha.

Seguramente pienses al principio que todas las excelencias que te cuento de la programación orientada a objetos vienen a ser una patraña, puesto que al final sigues teniendo que programar todo lo que el programa tiene que hacer. Sin embargo te aconsejo que tengas un poco de paciencia: cuando empecemos a desarrollar aplicaciones para Windows verás que no te engañaba, pues al desarrollar programas para Windows es cuando se ve que casi todo está hecho (las ventanas, los botones, las cajas de texto, cuadros de diálogo …) y solamente hay que usarlo sin más.

No obstante he preferido dejar el desarrollo de aplicaciones para Windows al final, puesto que de lo contrario, con tantos objetos, propiedades y eventos hubiera sido mucho más complicado hacer que comprendieras este lenguaje. Por este motivo, empezaremos desarrollando pequeños programas de consola para que puedas irte familiarizando cómodamente con la sintaxis, sin otras distracciones.

Programación orientada a objetos

Bien, vamos allá. Si conoces bien la programación orientada a objetos, puedes pasar adelante. De lo contrario te recomiendo que hagas una lectura lenta y cuidadosa de lo que viene a continuación, pues es básico para después comprender cómo funciona el lenguaje C#. Los conceptos están ilustrados con código de C#. Si no entiendes dicho código no desesperes, ya que el objetivo de esta introducción es que comprendas dichos conceptos, y no el código.

La programación orientada a objetos es algo más que “el último grito en programación”. No se trata de una moda, sino de un modo de trabajo más natural, que te permite centrarte en solucionar el problema que tienes que resolver en lugar de tener que andar pensando en cómo le digo al ordenador que haga esto o lo otro. Si alguna vez utilizaste algún lenguaje de los del “año la polca” me comprenderás enseguida. El 90% del código estaba dedicado a comunicarte con el ordenador (que si diseñar la pantalla, que si reservar memoria, que si el monitor me aguanta esta resolución…), y el otro 10% a resolver el problema. Ya no digamos si alguna vez has hecho, o intentado, algún programa para Windows usando C en bajo nivel. La programación orientada a objetos (POO en adelante) te abstrae de muchas de estas preocupaciones para que puedas dedicarte a escribir realmente el código útil, es decir, resolver el problema y ya está. Veamos un ejemplo muy claro de lo que quiero decir:

Imagina hacer un programa que mantenga una base de datos de personas. Simple y llanamente. ¿Cómo era esto antes? ¡JA! ¡JAJA! Recoge los datos, abre el archivo, define la longitud del registro, define la longitud y el tipo de cada campo, pon cada campo en su sitio, guarda el registro en el lugar del archivo donde le corresponde y cierra el archivo. Después, para una búsqueda, recoge los datos a buscar, abre el archivo, busca los datos, cierra el archivo, presenta los resultados. Si además permites modificaciones, recoge los nuevos datos, vuelve a abrir el archivo, guarda los datos modificados en el registro que le corresponde, cierra el archivo… Pesado, ¿eh? Ciertamente. La mayor parte del tiempo la dedicábamos a comunicarnos con el ordenador. ¿Cómo sería esto con un lenguaje orientado a objetos, como C#? Mucho más sencillo. Tenemos un objeto Persona. Para agregar un registro, sencillamente habría que dar los valores a dicho objeto y decirle que los guarde. Ya está. Nos da igual cómo haga el objeto Persona para guardar.

Tabla de Contenidos
1. Primera entrega (Breve introducción de aproximación a C#. Descripción teórica de la programación orientada a objetos.)
1.1. Primera aproximación a C#
1.2. Método a seguir durante todo el curso
1.3. Programación orientada a objetos
1.3.1. Clases y objetos
1.4. Los pilares de la POO: Encapsulamiento, herencia y polimorfismo

2. Segunda entrega (Bases generales: introducción a la tecnologia .NET y bases sintacticas de C#.)
2.1. Bases generales
2.2. El mundo .NET
2.3. Bases sintácticas de C#

3. Tercera entrega (Espacios de nombres, clases, indicadores y el sistema de tipos de C#.)
3.1. Los espacios de nombres
3.2. Las clases: unidades básicas de estructuramiento
3.3. Indicadores: variables y constantes
3.4. El sistema de tipos de C#

4. Cuarta entrega (Operadores de C#.)
4.1. Operadores

5. Quinta entrega (Nuestra primera aplicación en C#: “Hola mundo”.)
5.1. Nuestra primera aplicaión en C#

6. Sexta entrega (Métodos (1ª parte), sobrecarga de métodos, argumentos por valor y por referencia y métodos static.)
6.1. Métodos
6.1.1. Sobrecarga de métodos
6.1.2. Argumentos pasados por valor y por referencia
6.1.3. Métodos static

7. Séptima entrega (Constructores, destructores y el recolector de basura.)
7.1. Constructores
7.2. El recolector de basura y los destructores

8. Octava entrega (Campos y propiedades.)
8.1. Campos
8.2. Propiedades
8.3. Ejercicio 1
8.3.1. Pistas para el ejercicio 1 (Entrega 8)
8.3.2. Resolución del ejercicio

9. Novena entrega (Control de flujo condicional: if…else if…else; switch.)
9.1. Control de flujo: estructuras condicionales
9.2. Instrucción if…else if…else
9.3. Instrucción switch
9.4. Ejercicio 2

10. Décima entrega (Control de flujo iterativo: bucles (for, while, do), instrucciones de salto y recursividad.)
10.1. Control de flujo: estructuras iterativas
10.2. Bucles for
10.3. Bucles for anidados
10.4. Bucles while
10.5. Bucles do
10.6. Instrucciones de salto
10.7. La instrucción break
10.8. La instrucción continue
10.9. «er mardito goto»
10.10. Recursividad
10.11. Eercicio 3
10.11.1. Pistas para el ejercicio 3 (Entrega 10)
10.11.2. Resolución del ejercicio

11. Undécima entrega (Arrays.)
11.1. Arrays
11.2. Arrays multidimensionales
11.3. Arrays de arrays

12. Duodécima entrega (Indizadores, sobrecarga de operadores y conversiones definidas.)
12.1. Indizadores
12.2. Sobrecarga de operadores
12.3. Conversiones definidas
12.4. Ejercicio 4
12.4.1. Pistas para el ejercicio 4 (Entrega 12)
12.4.2. Resolución del ejercicio
12.5. Ejercicio 5

13. Trigésima entrega (Estructuras; Más sobre las clases; Herencia e Interfaces.)
13.1. Estructuras
13.2. Las clases en profundidad
13.3. Herencia
13.4. Interfaces
13.5. Ejercicio 6
13.5.1. Pistas para el ejercicio 6 (Entrega 13)
13.5.2. Resolución del ejercicio
13.6. Ejercico 7
13.6.1. Pistas para el ejercicio 7 (Entrega 13)
13.6.2. Resolución del ejercicio

Fuente: Curso C Sharp Erik