Score %0 (0 correct0 incorrect20 unanswered)

Q1. ¿En cuál de estas situaciones son las interfaces mejores que las clases abstractas?

  • Cuando necesitas definir las características de un tipo de objeto, usa una interfaz. Cuando necesitas definir las capacidades de un tipo de objeto, usa una clase abstracta.
  • Las interfaces son un legado de versiones anteriores de C#, e intercambiables con la nueva característica de clase abstracta.
  • Cuando necesitas una lista de capacidades y datos que son agnósticos a las clases, usa una interfaz. Cuando necesitas que un tipo de objeto comparta características, usa una clase abstracta.
  • Deberías usar tanto una interfaz como una clase abstracta al definir cualquier objeto complejo.

Q2. ¿Cuál afirmación es verdadera acerca de los delegados?

  • Los delegados no son compatibles con la versión actual de C#
  • No se pueden usar como devoluciones de llamada.
  • Solo se pueden pasar variables a los delegados como parámetros.
  • Se pueden encadenar.

Documentación oficial: Delegados

Q3. ¿Qué opción define mejor el modelo de programación asíncrona de C#?

  • reactivo
  • callback heredado
  • basado en tareas
  • basado en devolución de llamada

Documentación oficial: Modelo de programación asincrónica basado en tareas respuesta correcta --> var contacts = new List<string>();

Q4. ¿Cómo determinarías si una clase tiene un atributo particular?

  • .
var type = typeof(SomeType);
var attribute = type.GetCustomAttribute<SomeAttribute>();
  • .
var typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();
  • .
Attribute.GetCustomAttribute, typeof(SubControllerActionToViewDataAttribute)
  • .
Attribute.GetCustomAttribute(typeof(ExampleController), typeof(SubControllerActionToViewDataAttribute))
  1. Documentación oficial: Clase Attribute
  2. Documentación oficial: Método Attribute.GetCustomAttribute

Q5. ¿Cuál es la diferencia entre las palabras clave ref y out?

  • Las variables pasadas especifican que el parámetro es un parámetro de salida, mientras que ref especifica que una variable puede pasarse a una función sin inicializarse.
  • Las variables pasadas a ref pueden pasarse a una función sin inicializarse, mientras que out especifica que el valor es un valor de referencia que puede cambiarse dentro del método de llamada.
  • Las variables pasadas a out pueden pasarse a una función sin inicializarse, mientras que ref especifica que el valor es un valor de referencia que puede cambiarse dentro del método de llamada.
  • Las variables pasadas a ref especifican que el parámetro es un parámetro de salida, mientras que out especifica que una variable puede pasarse a una función sin inicializarse.
  1. Documentación oficial: ref
  2. Documentación oficial: modificador de parámetro out

Q6. ¿Cómo podrías obtener información sobre una clase, así como crear una instancia en tiempo de ejecución?

  • reflexión
  • serialización
  • abstracción
  • inyección de dependencias

Documentación oficial: Reflexión

Q7. ¿Qué ejemplifica este código?

    private static object objA;
    private static object objB;

    private static void performTaskA()
    {
        lock (objB)
        {
            Thread.Sleep(1000);
            lock (objA) { }
        }
    }

    private static void PerformTaskB()
    {
        lock (objA)
        {
            lock (objB) { }
        }
    }
  • una clase privada que usa multihilos
  • codificación multihilo
  • manejo incorrecto de hilos
  • un posible bloqueo

Documentación oficial: Bloqueos y condiciones de carrera

Q8. ¿Cuál es la diferencia entre un tipo anónimo y un tipo de datos regular?

  • Los tipos anónimos no tienen nombres de tipo
  • Los tipos anónimos solo pueden ser estáticos
  • Los tipos anónimos solo se pueden usar en estructuras
  • Los tipos anónimos no funcionan con LINQ.

Documentación oficial: Tipos anónimos

Q9. ¿Cuándo usarías un Diccionario en lugar de un tipo de Array en tu aplicación?

  • Cuando necesitas una estructura de colección escalonada
  • Cuando necesitas almacenar valores del mismo tipo
  • Cuando necesitas almacenar pares de clave-valor en lugar de valores únicos
  • Cuando necesitas una lista ordenada y buscable

Documentación oficial: Clase Dictionary<TKey,TValue>

Q10. ¿Cuál es la diferencia entre a.Equals(b) y a == b?

  • El método .Equals compara identidades de referencia mientras que == compara contenidos.
  • El método .Equals compara valores primitivos mientras que == compara todos los valores.
  • El método .Equals compara contenidos mientras que == compara identidad de referencia.
  • El método .Equals compara tipos de referencia mientras que == compara tipos de valor primitivos
  1. Documentación oficial: Object.Equals
  2. c-sharpcorner: Operador de igualdad(==) vs Método Equals()

Q11. ¿Cuál descripción mejor describe una situación de bloqueo?

  • cuando intentas instanciar dos objetos al mismo tiempo en la misma clase o estructura
  • cuando intentas ejecutar una acción después de que se registra un evento de usuario
  • cuando instrucciones simultáneas están esperando que otras terminen antes de ejecutarse
  • cuando intentas ejecutar una serie de eventos simultáneamente en múltiples hilos

Documentación oficial: Bloqueos y condiciones de carrera

Q12. ¿Cómo funciona la palabra clave async?

  • Permite el acceso a métodos asíncronos en la API de C#
  • Permite la agrupación de hilos y procesos síncronos en clases estáticas.
  • Permite que la palabra clave await se use en un método
  • Permite el acceso a métodos síncronos en la API de C#

Documentación oficial: async

Q13. ¿Qué es un objeto en C#?

  • una clase o estructura, incluidas sus variables y funciones
  • un tipo de datos primitivo que solo se puede crear en tiempo de compilación
  • un tipo de valor que solo se puede usar con una clase abstracta
  • una instancia de una clase o estructura que incluye campos, propiedades y/o métodos

Documentación oficial: Objetos

Q14. ¿Qué fragmento de código declara un tipo anónimo llamado userData?

  • var<<!---->T> userData = new <<!---->T> { name = "John", age = 32 };
  • var userData = new { name = "John", age = 32 };
  • AType userData = new AType { name = "John", age = 32 };
  • Anonymous<T> userData = new Anonymous<T> { name = "John", age = 32 };

Documentación oficial: Tipos anónimos

Q15. ¿Qué se devolverá cuando se ejecute este método?

public void userInput(string charParameters) { }

  • Nada
  • un Boolean
  • una variable de cadena
  • un número entero

Documentación oficial: void

Q16. ¿En qué orden se imprimirían los nombres de los empleados en este ejemplo?

string[] employees = { "Joe", "Bob", "Carol", "Alice", "Will" };

IEnumerable<string> employeeQuery = from person in employees
                                    orderby person
                                    select person;

foreach(string employee in employeeQuery)
{
    Console.WriteLine(employee);
}
  • ascendente
  • no ordenado
  • descendente
  • primero en entrar, primero en salir

dotnetpattern: Operador OrderBy de LINQ

Q17. Las expresiones Lambda se usan frecuentemente junto con cuál de lo siguiente?

  • Espacios de nombres (Namespaces)
  • LINQ
  • Alias de tipo (Type Aliasing)
  • Ensamblajes (Assemblies)

Documentación oficial: Resumen de la consulta integrada en el lenguaje (LINQ)

Q18. ¿Cuál es el formato correcto para comentarios de una sola línea y comentarios de varias líneas?

  • /_/ - Una Línea /_ - Varias Líneas
  • // Varias Líneas /_ Una Línea _/
  • //\* Varias Líneas / Una Línea
  • // Una Línea /* Varias Líneas */

w3schools: Comentarios de C#

Q19. ¿Cómo haces que un método en una clase abstracta sea sobrescribible?

  • Hazlo público
  • Hazlo estático
  • Hazlo privado
  • Hazlo virtual
  1. Documentación oficial: virtual
  2. Documentación oficial: abstract

Q20. ¿Cómo escribirías código para una propiedad de entero llamada Edad con un getter y un setter?

  • public int Age { get - set }
  • public int Age: get set;
  • public int Age (get, set );
  • public int Age { get; set; }

Documentación oficial: Uso de Propiedades