Cómo aprobar una entrevista de C#: las mejores preguntas de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción

Una entrevista para un puesto de desarrollador C# no es solo una prueba de sintaxis. Los empleadores quieren ver comprensión de la plataforma .NET, los principios de funcionamiento de CLR, la capacidad de escribir código eficiente y el conocimiento de enfoques modernos (async, LINQ, DI).

En este artículo analizaremos las mejores preguntas sobre C# de la A a la Z, desde tipos de datos básicos hasta temas complejos como la recolección de basura y la programación asíncrona. Cada pregunta va acompañada de una respuesta breve y un ejemplo de código para que puedas sentirte seguro en la entrevista.



1. Preguntas básicas: tipos, clases y memoria



1.1. ¿Cuál es la diferencia entre Value Type y Reference Type?

Value Type (int, struct, enum) se almacenan en la pila y se copian por valor. Reference Type (class, string, array) se almacenan en el montón, la variable contiene una referencia al objeto.

int a = 10;int b = a; // b es una copia, a y b son independientes

class MyClass { public int X; }MyClass obj1 = new MyClass { X = 5 };MyClass obj2 = obj1; // obj2 referencia al mismo objetoobj2.X = 10; // obj1.X también será 10


1.2. ¿Qué es Boxing y Unboxing?

Boxing es el empaquetado de un tipo de valor en un objeto (en el montón). Unboxing es el proceso inverso. El uso frecuente reduce el rendimiento.

int number = 42;object boxed = number;    // Boxingint unboxed = (int)boxed; // Unboxing


1.3. Hable sobre el recolector de basura (Garbage Collector).

El GC en .NET libera automáticamente la memoria de los objetos a los que no hay referencias. Funciona por generaciones (Gen 0, 1, 2). Los objetos de gran tamaño (>85 KB) van al Large Object Heap (LOH).

Consejo: No llame a GC.Collect() manualmente, ya que interfiere con las optimizaciones del GC.



2. POO y principios de diseño



2.1. Explique los principios SOLID.

  • S — Single Responsibility: una clase debe tener una única razón para cambiar.
  • O — Open/Closed: abierta para extensión, cerrada para modificación.
  • L — Liskov Substitution: las subclases deben poder reemplazar correctamente a la clase base.
  • I — Interface Segregation: muchas interfaces pequeñas son mejores que una grande.
  • D — Dependency Inversion: las dependencias deben ser de abstracciones, no de clases concretas.


2.2. ¿Qué es Dependency Injection (DI)?

DI es un patrón en el que las dependencias se pasan a la clase desde el exterior (a través del constructor, método o propiedad). En .NET Core hay un contenedor DI integrado.

public interface ILogger{    void Log(string message);}

public class ConsoleLogger : ILogger{ public void Log(string message) => Console.WriteLine(message);}

public class OrderService{ private readonly ILogger _logger; public OrderService(ILogger logger) // DI a través del constructor { _logger = logger; }}


3. LINQ, excepciones y cadenas



3.1. ¿Cómo funciona LINQ? ¿Qué es la ejecución diferida?

LINQ (Language Integrated Query) permite escribir consultas a colecciones, bases de datos (EF Core) y XML. La ejecución diferida significa que la consulta solo se ejecuta al recorrer el resultado (por ejemplo, mediante foreach o .ToList()).

var numbers = new List<int> { 1, 2, 3, 4, 5 };var query = numbers.Where(n => n > 2); // la consulta no se ejecutanumbers.Add(6); // agregamos después de crear la consultaforeach (var n in query) // ejecución aquí    Console.WriteLine(n); // 3, 4, 5, 6


3.2. ¿Cuál es la diferencia entre String y StringBuilder?

String es un tipo inmutable. Cada operación de concatenación crea un nuevo objeto. StringBuilder utiliza un búfer mutable y es eficiente para múltiples cambios en la cadena.

// Malo (muchas asignaciones)string s = "";for (int i = 0; i &                

Blogs

Book Recommendations