Cada lenguaje de programación tiene sus propias reglas de escritura: cómo se separan las instrucciones, cómo se agrupan bloques de código, cómo se nombran las cosas. A estas reglas las llamamos, en conjunto, sintaxis. En esta lección aprenderás las reglas de sintaxis fundamentales de C# —mayúsculas y minúsculas, punto y coma, llaves, comentarios, convenciones de nomenclatura e identificadores válidos— que usarás en absolutamente todo el código que escribas a partir de ahora. Dominar bien estas reglas te evitará gran parte de los errores de compilación que suelen frustrar a quien empieza a programar.
Contenido
- Sensibilidad a mayúsculas y minúsculas
- Punto y coma, llaves y bloques de código
- Comentarios:
//,/* */y/// - Convenciones de nomenclatura: PascalCase y camelCase
- Estructura general de un fichero C#
- Identificadores válidos
Sensibilidad a mayúsculas y minúsculas
C# es un lenguaje case-sensitive (sensible a mayúsculas y minúsculas). Esto significa
que miVariable, MiVariable y MIVARIABLE son considerados tres nombres distintos por
el compilador. Esto afecta a todo: nombres de variables, de métodos, de clases, y también a
las propias palabras clave del lenguaje.
Console.WriteLine("Esto compila correctamente");
// console.writeline("Esto NO compila"); // 'console' con minúscula no existeEste detalle es muy importante porque es una fuente habitual de errores para quien viene de otros contextos (por ejemplo, algunos sistemas de archivos o lenguajes que no distinguen mayúsculas de minúsculas). En C#, siempre hay que respetar exactamente las mayúsculas y minúsculas de cada palabra clave y de cada nombre que uses.
Punto y coma, llaves y bloques de código
El punto y coma ;
En C#, (casi) toda instrucción termina con un punto y coma ;. El punto y coma le indica al
compilador "aquí termina esta instrucción, la siguiente es independiente":
Olvidar el punto y coma es, probablemente, el error de sintaxis más común al empezar a programar en C#. El compilador te avisará con un mensaje de error indicando la línea exacta.
Las llaves { } y los bloques de código
Las llaves delimitan bloques de código: un conjunto de instrucciones que se tratan como
una unidad. Ya vimos en la lección anterior que un espacio de nombres, una clase y un método
son, cada uno, un bloque delimitado por llaves. Lo mismo ocurrirá, más adelante en el curso,
con los bloques de las estructuras de control (if, bucles, etc. — Módulo 2).
Una convención muy extendida (y la que seguiremos en este curso) es la indentación: sangrar (añadir espacios o tabulaciones) el código que está dentro de un bloque, para que sea visualmente evidente qué pertenece a qué. C# no obliga a indentar el código para que compile —a diferencia de Python, por ejemplo— pero un código bien indentado es muchísimo más fácil de leer y mantener.
// Código correctamente indentado (recomendado)
if (true)
{
Console.WriteLine("Bloque indentado correctamente");
}
// Código sin indentar (compila igual, pero es difícil de leer)
if (true) {
Console.WriteLine("Bloque sin indentar");
}No te preocupes todavía por el significado de if; lo estudiaremos en detalle en el Módulo 2.
Aquí solo nos interesa la forma, no el contenido.
Comentarios: //, /* */ y ///
Los comentarios son fragmentos de texto que el compilador ignora por completo: sirven únicamente para que las personas que lean el código (incluido tú mismo, en el futuro) entiendan qué hace o por qué se hizo de una determinada forma. C# ofrece tres tipos:
| Tipo | Sintaxis | Uso habitual |
|---|---|---|
| Comentario de una línea | // texto |
Aclaraciones breves junto a una línea de código |
| Comentario de bloque | /* texto */ |
Comentarios que ocupan varias líneas, o desactivar temporalmente un fragmento de código |
| Comentario de documentación | /// texto |
Documentar clases y métodos de forma que herramientas externas (como el propio editor) puedan mostrar esa documentación como ayuda |
Comentario de una línea
// Este es un comentario de una línea
Console.WriteLine("Hola"); // También se puede comentar al final de una línea de códigoComentario de bloque
/*
Este comentario ocupa
varias líneas de texto.
Muy útil para explicaciones largas.
*/
Console.WriteLine("BiblioTech");Comentario de documentación
/// <summary>
/// Muestra un mensaje de bienvenida al sistema BiblioTech.
/// </summary>
Console.WriteLine("Bienvenido a BiblioTech!");Los comentarios de documentación (///) usan una sintaxis especial basada en etiquetas XML,
como <summary>. Aunque en este módulo no escribimos todavía métodos ni clases propias
(eso llega en el Módulo 3), es importante que reconozcas esta sintaxis: muchos editores
muestran automáticamente el contenido de estos comentarios como ayuda emergente cuando usas
un método, y en proyectos profesionales es una práctica muy valorada documentar así el código
público.
Convenciones de nomenclatura: PascalCase y camelCase
Una convención de nomenclatura es un acuerdo (no una regla obligatoria del compilador) sobre cómo escribir los nombres de las cosas en el código, para que sea coherente y fácil de leer para cualquier persona familiarizada con el lenguaje. En C#, la comunidad y el propio equipo de .NET siguen, de forma muy consistente, estas dos convenciones:
| Convención | Regla | Ejemplo | Se usa para |
|---|---|---|---|
| PascalCase | Cada palabra empieza con mayúscula, sin separadores | TituloLibro, NumeroPaginas, Program |
Nombres de clases, métodos, propiedades |
| camelCase | La primera palabra en minúscula, las siguientes con mayúscula inicial | tituloLibro, numeroPaginas |
Nombres de variables locales y parámetros |
Ejemplo comparando ambos estilos sobre datos de BiblioTech:
// camelCase: variables locales
string tituloLibro = "Cien anos de soledad";
int numeroPaginas = 471;
bool estaDisponible = true;
// PascalCase: se usará para clases y métodos (Módulo 3), y ya lo vemos en 'Program' y 'Console'
Console.WriteLine(tituloLibro);Aunque el compilador no te obliga a seguir estas convenciones (compilaría igual si usaras
mayúsculas y minúsculas de otra forma), seguirlas es una práctica profesional fundamental:
hace que tu código sea reconocible y coherente con el resto del ecosistema .NET, incluidas
todas las bibliotecas estándar (Console, WriteLine, etc., ya siguen PascalCase).
Otras recomendaciones habituales
- Los nombres deben ser descriptivos: mejor
numeroPaginasquenonp. - Se evita, en general, el uso de guiones bajos
_como separador dentro del nombre (por ejemplo, se prefieretituloLibroatitulo_libro), aunque sí se usa a veces un guion bajo como prefijo en ciertos contextos (por ejemplo, en campos privados de una clase, algo que veremos en el Módulo 3). - No se usan tildes,
ñni caracteres especiales en los nombres de variables, para evitar problemas de compatibilidad entre teclados, editores y sistemas.
Estructura general de un fichero C#
Recordando lo visto en la lección anterior, un archivo .cs típico (en su forma clásica)
sigue esta estructura general, de fuera hacia dentro:
using System; // 1. Directivas using
namespace BiblioTechConsola // 2. Espacio de nombres
{
class Program // 3. Declaración de tipo (clase)
{
static void Main(string[] args) // 4. Miembro (método)
{
// 5. Instrucciones
Console.WriteLine("Bienvenido a BiblioTech!");
}
}
}| Paso | Elemento | Explicación |
|---|---|---|
| 1 | Directivas using |
Indican qué espacios de nombres externos se van a utilizar en el archivo. Se colocan siempre al principio. |
| 2 | Espacio de nombres | Agrupa el código del proyecto bajo un nombre común, evitando conflictos con otras bibliotecas. |
| 3 | Declaración de tipo | Una clase (o, más adelante en el curso, un struct, una interfaz, un record...) que contiene los miembros del programa. |
| 4 | Miembros | Métodos, y más adelante (Módulo 3) propiedades y campos, definidos dentro del tipo. |
| 5 | Instrucciones | El código que realmente se ejecuta, dentro de un método. |
Como vimos en la lección anterior, en proyectos modernos con top-level statements los pasos
2, 3 y 4 quedan implícitos: solo escribes el paso 1 (si hace falta algún using adicional) y
el paso 5 directamente. El compilador sigue generando "por debajo" esa misma estructura.
Usings implícitos
Recordarás que, al ver el archivo .csproj generado en la lección anterior, aparecía la
opción <ImplicitUsings>enable</ImplicitUsings>. Esta opción, disponible en proyectos
modernos de .NET, hace que ciertos espacios de nombres muy habituales (como System, donde
vive Console) estén disponibles automáticamente en todo el proyecto, sin necesidad de
escribir using System; al principio de cada archivo. Es la razón por la que, en los
ejemplos de las lecciones anteriores, hemos podido usar Console.WriteLine directamente sin
ninguna línea using visible.
Identificadores válidos
Un identificador es el nombre que le das a cualquier elemento de tu código: una variable, un método, una clase, etc. C# impone algunas reglas obligatorias (que si no se cumplen, el programa directamente no compila):
- Debe empezar por una letra o por un guion bajo
_(nunca por un número). - El resto de caracteres pueden ser letras, números o guiones bajos.
- No puede coincidir exactamente con una palabra clave reservada del lenguaje (como
class,namespace,if,int...), salvo que se escriba con el prefijo especial@(una técnica muy poco habitual, reservada para casos excepcionales). - No puede contener espacios ni símbolos como
-,.,ñ, tildes, etc.
| Identificador | ¿Válido? | Motivo |
|---|---|---|
tituloLibro |
Sí | Empieza por letra, sin caracteres especiales |
_isbn |
Sí | Empieza por guion bajo, es válido |
numeroDePaginas2 |
Sí | Los números se permiten, mientras no sean el primer carácter |
2numeroPaginas |
No | Empieza por un número |
titulo-libro |
No | El guion - no está permitido en identificadores |
título |
No recomendado | Aunque algunos compiladores modernos lo aceptan, se evita por convención y compatibilidad |
class |
No | Coincide con una palabra clave reservada del lenguaje |
Estas reglas se aplican no solo a variables sino, como veremos en módulos posteriores, a nombres de métodos, clases, propiedades y cualquier otro elemento que definamos nosotros mismos.
Errores Comunes y Consejos
- Olvidar el punto y coma: ya lo hemos mencionado, pero merece repetirse porque es, con diferencia, el error más frecuente al empezar.
- Mezclar mayúsculas y minúsculas sin darse cuenta: escribir
Console.writeline(...)en lugar deConsole.WriteLine(...)provoca un error de compilación, ya que C# distingue mayúsculas de minúsculas. - Anidar llaves sin indentar: aunque compile igual, el código sin indentar es muy difícil de depurar cuando el programa crece. Acostumbra tu editor a indentar automáticamente (la mayoría lo hacen al pulsar Intro).
- Usar nombres poco descriptivos: variables como
x,a1,tempdificultan entender el código más adelante. Prefiere siempre nombres descriptivos comotituloLibrooestaDisponible. - Confundir convención con obligación: PascalCase y camelCase son convenciones, no reglas del compilador; pero seguirlas es lo que se espera de cualquier código C# profesional, y las seguiremos durante todo el curso.
- Consejo: cuando el compilador señale un error de sintaxis en una línea, revisa también la línea anterior: muchas veces el error real (como un punto y coma olvidado) está justo antes de donde se informa el problema.
Ejercicios
-
De la siguiente lista de identificadores, indica cuáles son válidos en C# y, para los que no lo sean, explica por qué:
numeroPaginas,3isbn,_titulo,nombre completo,namespace,Autor2. -
Reescribe el siguiente fragmento de código aplicando correctamente las convenciones de nomenclatura (camelCase para variables) y una indentación adecuada:
string TITULO = "El Quijote"; int Paginas=863; bool Disponible=true; Console.WriteLine(TITULO); -
Añade a tu fragmento corregido del ejercicio anterior: un comentario de una línea que explique qué hace la variable
paginas, y un comentario de bloque (/* */) al principio del archivo que explique brevemente qué hace todo el programa.
Soluciones
-
numeroPaginas→ Válido (empieza por letra).3isbn→ No válido (empieza por un número)._titulo→ Válido (empieza por guion bajo).nombre completo→ No válido (contiene un espacio).namespace→ No válido (es una palabra clave reservada del lenguaje).Autor2→ Válido (empieza por letra, contiene un número que no es el primer carácter).
-
Versión corregida:
string titulo = "El Quijote"; int paginas = 863; bool disponible = true; Console.WriteLine(titulo);Se ha cambiado
TITULO,PaginasyDisponible(con mayúscula inicial, propio de PascalCase) atitulo,paginasydisponibleen camelCase, adecuado para variables locales; también se ha añadido un espacio alrededor del signo=por legibilidad, aunque el compilador aceptaría ambas formas. -
Ejemplo de solución:
/* Programa de ejemplo de BiblioTech. Muestra por pantalla el título de un libro del catálogo. */ string titulo = "El Quijote"; int paginas = 863; // Número total de páginas del libro bool disponible = true; Console.WriteLine(titulo);
Conclusión
En esta lección has aprendido las reglas de sintaxis que gobiernan cualquier programa en C#: la distinción entre mayúsculas y minúsculas, el uso del punto y coma y las llaves para delimitar instrucciones y bloques, los distintos tipos de comentarios, las convenciones de nomenclatura PascalCase y camelCase, la estructura general de un archivo y las reglas para que un identificador sea válido. Con esta base ya puedes leer y escribir código C# sintácticamente correcto y bien organizado.
En la siguiente lección, Variables y Tipos de Datos, pondremos en práctica estas reglas de nomenclatura declarando variables reales con distintos tipos de datos —números, texto, valores booleanos— usando como ejemplo los datos de un libro de BiblioTech: su título, su ISBN, su número de páginas y si está disponible o no.
Curso de Programación en C#
Módulo 1: Introducción a C#
- Introducción a C#
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Arrays y Cadenas de Texto
Módulo 2: Estructuras de Control
Módulo 3: Programación Orientada a Objetos
- Clases y Objetos
- Métodos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
- Structs y Records: Tipos por Valor y por Referencia
Módulo 4: Conceptos Avanzados de C#
- Interfaces
- Delegados y Eventos
- Pattern Matching y Características Modernas de C#
- Genéricos
- Colecciones
- LINQ (Consulta Integrada en el Lenguaje)
- Programación Asíncrona
Módulo 5: Trabajando con Datos
- Entrada/Salida de Archivos
- Serialización
- Conectividad con Bases de Datos
- Entity Framework
- Trabajo con JSON y Consumo de APIs REST
Módulo 6: Temas Avanzados
- Reflexión
- Atributos
- Programación Dinámica
- Gestión de Memoria y Recolección de Basura
- Multihilo y Programación Paralela
Módulo 7: Construcción de Aplicaciones
- Formularios de Windows
- WPF (Windows Presentation Foundation)
- ASP.NET Core
- Blazor
- Xamarin y .NET MAUI
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Estándares de Codificación y Mejores Prácticas
- Patrones de Diseño
- Inyección de Dependencias e Inversión de Control
- Pruebas Unitarias
- Revisión y Refactorización de Código
