En este artículo, exploraremos los fundamentos de C#, incluyendo los tipos de datos, el control de flujo y las diferencias entre .NET Framework, .NET Core y .NET Moderno. C# es un lenguaje de programación moderno y versátil que se utiliza en una amplia variedad de aplicaciones, desde software de escritorio hasta aplicaciones web y móviles.
C# es un lenguaje de programación moderno, orientado a objetos, y desarrollado por Microsoft como parte de su plataforma .NET. Fue diseñado para ser simple, eficiente y seguro, inspirado en lenguajes como C++ y Java, pero eliminando características complejas y propensas a errores.
C# es un lenguaje de programación fuertemente tipado, lo que significa que cada variable y cada expresión tiene un tipo de datos asociado. Esto permite al compilador detectar errores en tiempo de compilación, y proporciona una mayor seguridad y rendimiento en tiempo de ejecución.
El objetivo de C# es permitir a los desarrolladores construir una amplia gama de aplicaciones, desde software de escritorio hasta aplicaciones web, móviles y de inteligencia artificial. Gracias a su versatilidad y constante evolución, es un pilar en el desarrollo empresarial y de plataformas en la nube.
.NET es una plataforma de desarrollo de software creada por Microsoft que permite construir una amplia variedad de aplicaciones, como aplicaciones web, de escritorio, móviles, juegos y servicios en la nube. Es multiplataforma, lo que significa que se puede utilizar en sistemas operativos como Windows, macOS y Linux.
.NET está compuesta por:
.NET Framework: Es la versión original de .NET, diseñada para ejecutarse solo en Windows. Aunque sigue siendo utilizado en aplicaciones heredadas, ha sido reemplazado progresivamente por .NET moderno.
.NET Core: Es una versión multiplataforma y de código abierto de .NET, diseñada para ejecutarse en Windows, macOS y Linux. Fue la base de .NET 5 y versiones posteriores.
.NET Moderno: Es el nombre que se le da a las versiones más recientes de .NET. A partir de .NET 5, Microsoft unificó .NET Framework y .NET Core en una plataforma única y más eficiente. Ofrece mejor rendimiento, compatibilidad multiplataforma y soporte para la última tecnología.
En C#, los tipos de datos se dividen en dos categorías principales: tipos de valor y tipos de referencia.
Los tipos de valor almacenan sus valores directamente en la memoria y generalmente se asignan en la pila (stack). Cada variable tiene su propia copia de los datos. Algunos ejemplos de tipos de valor incluyen:
int
, long
, short
, byte
, sbyte
, uint
, ulong
, ushort
.float
, double
, decimal
, utilizado para cálculos financieros debido a su alta precisión.bool
, almacena true
o false
.char
, almacena un solo carácter Unicode.struct
, tipos de valor personalizados.enum
, conjunto de constantes simbólicas.Los tipos de referencia almacenan una referencia (o puntero) a la ubicación de los datos en la memoria, generalmente en el montón (heap). Las variables de tipo de referencia comparten el acceso a los mismos datos en memoria. Algunos ejemplos de tipos de referencia incluyen:
class
, las clases son tipos de referencia que pueden contener datos y métodos.interface
, las interfaces son tipos de referencia que definen un contrato de métodos y propiedades que se deben implementar.int[]
, string[]
, entre otros. Es un tipo de referencia que almacena una colección de elementos.string
, aunque se comporta como un tipo de valor, es un tipo de referencia inmutable que almacena una secuencia de caracteres Unicode.delegate
, representan un puntero a un método y se utilizan para implementar la programación orientada a eventos.dynamic
, permite la evaluación de tipo en tiempo de ejecución.object
, es la clase base de todos los tipos de referencia en C#.En C#, la conversión entre tipos de datos puede realizarse de diferentes maneras:
La conversión implícita se produce cuando no hay riesgo de pérdida de información al convertir un tipo de dato a otro. Por ejemplo, convertir un int
a un long
. Este proceso se realiza automáticamente por el compilador.
int entero = 10;
float flotante = entero; // Conversión implícita de int a float
La conversión explícita requiere un operador de conversión, ya que puede haber pérdida de información o riesgo de error. Se realiza envolviendo el tipo objetivo entre paréntesis antes de la variable o valor que se desea convertir.
double numero = 10.5;
int entero = (int)numero; // Conversión explícita de double a int
Algunos tipos en C# incluyen métodos específicos para convertir valores entre diferentes tipos de datos. Estos métodos pueden ser seguros o arrojar excepciones si la conversión falla.
ToString()
: Convierte cualquier tipo a una representación en texto.Parse()
: Convierte una cadena en un tipo numérico, como int.Parse("10")
.TryParse()
: Similar a Parse()
, pero no arroja una excepción si la conversión falla, en su lugar, devuelve un valor booleano que indica si la conversión fue exitosa.Convert
: Es una clase estática que proporciona métodos para convertir entre diferentes tipos de datos.Las variables son espacios de almacenamiento con un tipo de datos específico, mientras que las constantes contienen valores que no cambian.
En C#, las variables se declaran especificando el tipo de datos y el nombre de la variable. La asignación de un valor se realiza con el operador =
.
int edad; // Declaración de una variable de tipo entero
edad = 25; // Asignación de un valor a la variable
string nombre = "Juan"; // Declaración y asignación en una sola línea
const
y readonly
const
: Define una constante en tiempo de compilación cuyo valor no puede cambiar. Debe inicializarse en la misma línea donde se declara.readonly
: Define un campo cuyo valor solo puede asignarse en tiempo de ejecución o en el constructor de la clase, y no puede cambiarse después.const double PI = 3.1416; // Declaración de una constante
readonly string fechaActual = DateTime.Now.ToString("dd/MM/yyyy"); // Declaración de un campo de solo lectura
Se recomienda utilizar readonly
en lugar de const
cuando el valor de la constante no se conoce en tiempo de compilación, sino en tiempo de ejecución, como en el caso de obtener la fecha actual.
El control de flujo en C# permite dirigir la ejecución del programa según condiciones específicas.
if
, else if
, else
La estructura if
permite ejecutar un bloque de código si una condición es verdadera. Se puede utilizar else if
para evaluar múltiples condiciones y else
para ejecutar un bloque si ninguna condición es verdadera.
int edad = 18;
if (edad < 18)
{
Console.WriteLine("Eres menor de edad");
}
else if (edad == 18)
{
Console.WriteLine("Tienes 18 años");
}
else
{
Console.WriteLine("Eres mayor de edad");
}
switch
, case
, default
La estructura switch
permite evaluar una expresión y ejecutar diferentes bloques de código según el valor de la expresión. Se pueden utilizar múltiples case
y un bloque default
opcional.
int dia = 3;
switch (dia)
{
case 1:
Console.WriteLine("Lunes");
break;
case 2:
Console.WriteLine("Martes");
break;
case 3:
Console.WriteLine("Miércoles");
break;
default:
Console.WriteLine("Otro día");
break;
}
for
El bucle for
se utiliza para repetir un bloque de código un número específico de veces.
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
foreach
El bucle foreach
se utiliza para iterar sobre una colección de elementos, como arreglos o listas.
int[] numeros = { 1, 2, 3, 4, 5 };
foreach (int numero in numeros)
{
Console.WriteLine(numero); // Imprime 1, 2, 3, 4, 5
}
while
El bucle while
se utiliza para repetir un bloque de código mientras una condición sea verdadera.
int i = 0;
while (i < 5)
{
Console.WriteLine(i); // Imprime 0, 1, 2, 3, 4
i++;
}
do while
El bucle do while
es similar al bucle while
, pero garantiza que el bloque de código se ejecute al menos una vez antes de evaluar la condición.
int i = 0;
do
{
Console.WriteLine(i); // Imprime 0
i++;
} while (i < 0);
break
y continue
break
La palabra clave break
se utiliza para salir de un bucle o de una instrucción switch
de manera inmediata, independientemente de si se ha alcanzado o no la condición de terminación del bucle.
Cuando se ejecuta break
dentro de un bucle (for
, while
, foreach
), el flujo de control se interrumpe y el programa sigue ejecutando las instrucciones que están después del bucle.
Ejemplo de uso de break
en un bucle for
:
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; // Sale del bucle cuando i es igual a 5
}
Console.WriteLine(i);
}
Salida:
0
1
2
3
4
En este caso, el bucle se interrumpe cuando i
es igual a 5, por lo que no se imprimen los números 5, 6, 7, 8 y 9.
continue
La palabra clave continue
se utiliza para omitir el resto de las instrucciones de la iteración actual de un bucle y pasar a la siguiente iteración del mismo. A diferencia de break
, que sale completamente del bucle, continue
solo interrumpe la iteración actual y el bucle continúa con la siguiente.
Cuando se ejecuta continue
, el flujo de control salta inmediatamente al inicio del bucle (o a la condición de la siguiente iteración, dependiendo del tipo de bucle), omitiendo cualquier código que esté después del continue
en la iteración actual.
Ejemplo de uso de continue
en un bucle for:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0) // Si i es par
{
continue; // Salta el resto del código y va a la siguiente iteración
}
Console.WriteLine(i);
}
Salida:
1
3
5
7
9
En este caso, cuando i
es par, el continue
omite la instrucción Console.WriteLine(i)
y pasa a la siguiente iteración del bucle, por lo que solo se imprimen los números impares.
En este artículo, hemos explorado los fundamentos de C#, incluyendo los tipos de datos, el control de flujo y las diferencias entre .NET Framework, .NET Core y .NET Moderno. C# es un lenguaje versátil y poderoso que permite a los desarrolladores crear una amplia variedad de aplicaciones, desde software de escritorio hasta aplicaciones web y móviles. Con una sintaxis clara y concisa, C# es una excelente opción para aquellos que buscan un lenguaje moderno y seguro para el desarrollo de software.
¡No te pierdas mi próximo blog! 👨💻