Está en la página 1de 10

.

NET
1.¿Qué es .NET? ¿Cuáles son sus principales características?
Es una plataforma gratuita y de codigo abierto que nos provee una serie de herramientas y programas para
construir distintos softwares, asi como el entorno necesario para ejecutarlo en distintos sistemas operativos y
tipos de arquitectura. Tiene como caracteristicas: ser multiplataforma (se puede utilizar en Windows, Linux,
MacOs), Open Source, multilenguaje, y Visual Basic (tiene una sintaxis similar al ingles).
2.¿Cómo se categorizan las versiones de .NET? Explique su relación con las políticas de soporte y
mantenimiento de dichas versiones.
Se categorizan en dos grandes grupos que determinan por cuántos años tendrán soporte:
Long-Term Support (LTS): Son versiones estables y que se actualizarán con poca frecuencia. Se garantiza su
soporte por 3 años desde su lanzamiento.
Current: Contienen las últimas mejoras y tienden a actualizarse con frecuencia. Reciben actualizaciones hasta
18 meses después de su lanzamiento.

Ambas reciben correcciones críticas relacionadas a temas de seguridad. Debemos mantenernos al día con
estas actualizaciones para obtener soporte.

3.¿Qué componentes forman parte de una implementación de .NET? Describa brevemente cada uno.
Common Language RunTime (CLR): programa encargado de administrar la ejecucion de un programa,
funciona como una maquina virtual que sirve de interprete e intermediario para darle instrucciones a la
maquina real, tambien administra recursos y la memoria.
Base Class Library (BCL): serie de bibliotecas con funcionalidades de uso general
Frameworks: define una forma de trabajo y nos brinda un conjunto de herramientas de alto nivel para
desarrollar un tipo de aplicación en concreto
Herramientas e infraestructura: lenguajes y sus compiladores MSBuild (motor para cargar y construir
aplicaciones), etc.
4.¿En qué se diferencia un marco de trabajo (framework) de una biblioteca (library)?

Bibliotecas (Libraries) Marcos de trabajo (Frameworks)


Se trata de una serie de
Definen una forma de trabajo y nos brinda un conjunto de
funcionalidades para realizar
herramientas de alto nivel que permiten desarrollar ciertos tipos de
operaciones específicas, bien
aplicaciones con facilidad.
definidas.
Se componen de una colección de
Se componen de múltiples bibliotecas y otras herramientas.
funciones y objetos auxiliares.
Nosotros invocamos las funciones de
El framework invoca al código y maneja el flujo de ejecución.
la biblioteca a necesidad.
El desarrollador tiene libertad y control El framework tiene un comportamiento por defecto y define un
para usar la biblioteca como desee. estándar para el desarrollo.

5.Describa los estados y etapas del proceso de compilación de .NET.


Etapa 1: Compilación estática
El codigo fuente es traducido por el compilador a un lenguaje ensamblador conocido como lenguaje intermedio
este se dispara cuando el desarrollador o proceso automatizado dispara el proceso de construccion.

El resultado de la compilación serán archivos que contendrán el lenguaje intermedio y serán aquellos que se
distribuirán a los usuarios finales.

Etapa 2: Compilación just-in-tim

El sistema operativo invoca al Common Language Runtime, este compila el lenguaje intermedio a lenguaje
nativo (máquina).
6.Explique y compare tiempo de compilación y tiempo de ejecución.
Tiempo de compilacion: el intervalo de tiempo en el que un compilador compila código escrito en un lenguaje
de programación a una forma de código ejecutable por una máquina, este normalmente realiza un chequeo de
sintaxis y una optimización del código generado.
Tiempo de ejecución: el intervalo de tiempo en el que un programa de computadora se ejecuta en un sistema
operativo. Este tiempo se inicia con la puesta en memoria principal del programa, por lo que el sistema
operativo comienza a ejecutar sus instrucciones. Y finaliza en el momento en que este envía al sistema
operativo la señal de terminación, sea esta una terminación normal, en que el programa tuvo la posibilidad de
concluir sus instrucciones satisfactoriamente, o una terminación anormal, en el que el programa produjo algún
error y el sistema debió forzar su finalización.
C#

1.Enumere y describa las características de C#.


Compilación híbrida: se compila primero a un lenguaje intermedio y posteriormente al ejecutarse es
recompilado a lenguaje nativo/máquina. Esto se contrapone a los lenguajes cuyo código fuente es ejecutado
línea a línea y en tiempo de ejecución por un intérprete
Orientado a objetos: el lenguaje ofrece una serie de características orientadas a objetos como soporte para
herencia, polimorfismo y encapsulamiento
Orientado a componentes: un componente de software individual es un paquete de software o un módulo que
encapsula un conjunto de datos o funciones relacionadas. Se trata de construir piezas de software débilmente
acopladas (poco dependientes entre si), permitiendo la reutilización e intercambio de las mismas.
Seguridad de tipos: es un lenguaje principalmente de tipado estático
Garbage Collection: está integrado un programa especial que se encarga de la liberación de memoria no
utilizada en el segmento heap
Sistema de tipos unificado: todos los tipos de dato tienen una serie de operaciones/funcionalidades en común.
Los valores de cualquier tipo pueden ser almacenados, transportados y operadores de una manera
consistente.
Case sensitive: C# es un lenguaje que distingue mayúsculas de minúsculas
2.Explique la diferencia entre lenguajes de tipado estático y lenguaje de tipado dinámico.
Tipado estático: los tipos de las variables tienen que definirse antes de compilar el programa
Tipado dinamico: los tipos de las variables se definen durante la ejecución del programa.
3.Defina sintaxis, semántica y vocabulario de una lenguaje de programación.
Sintaxis:es una serie de reglas que define las combinaciones correctas de símbolos y el orden para formar
sentencias y expresiones válidas. En otras palabras, define cómo debe estar escrito y estructurado un lenguaje
para construir sentencias válidas. Si la sintaxis es inválida el programa no compila.
Semántica:es el signicado que surge de la combinación de esas sentencias y expresiones con una sintaxis
válida. ¿Qué instrucción generan a la computadora? ¿tiene sentido lógico?.
Vocabulario: son una serie de palabras reservadas y operadores que sirven para construir sentencias y
expresiones siguiendo las reglas de sintaxis.
4.Defina los siguientes términos: Sentencia (statement), variable y expresión (expression). ¿Cómo se
relacionan?
Una sentencia (statement) puede estar compuesta de múltiples variables y expresiones. En el siguiente
ejemplo,sueldoNeto es una variable y sueldoBruto – aportes – impuestos es una expresión compuesta de 3
operandos (sueldoBruto, aportes, impuestos) y los operadores -
5.¿En qué se diferencian variables y constantes?
Las variables se utilizan para almacenar los datos en memoria y así poder procesarlos, estas pueden pisarse,
las constantes representan valores inmutables, es decir que sus valores se definen en tiempo de compilación y
no cambian durante el resto de la vida del programa.
6.¿Qué es el punto de entrada (entry point)? ¿Cuál es en los programas de C#?
El método Main es el punto de entrada de todos los programas en C#, es decir, el primer método en ejecutarse.
7.¿Qué es el Common Type System (CTS)?
Es un estándar que especifica cómo se representan las definiciones de tipo y los valores específicos de los
tipos en la memoria del equipo.
8.Explique las diferencias entre los tipos de referencia y los tipos de valor.
Existen dos segmentos o categorías de memoria: la pila (stack memory) y el montón (heap memory). La
memoria stack es más rápida pero limitada en tamaño. La memoria heap es más lenta pero más abundante.
Los tipos de valor: son tipos de dato representados por su valor real. Si son asignados a una variable, esa
variable obtendrá una nueva copia del valor. Todos los tipos de valor se almacenan en la pila.
Los tipos de referencia:son tipos de dato representados por una referencia que apunta a un sector de memoria
donde se encuentra el valor real. Si son asignados a una variable, esa variable almacenará la referencia y
apuntará al valor original. No se realiza ninguna copia del valor. Todos los tipos de referencia se almacenan en
el montón.
9.¿Qué es un alias?
Algunas de las palabras clave de C# como double, int, string son alias que representan tipos proveidos por la
implementación de la plataforma. Es una forma de usar clases de una forma mas simple
10.¿Qué son los tipos object y dynamic? ¿En qué se diferencian?
Dynamic es otro tipo especial que también puede almacenar cualquier valor. La diferencia con object radica en
que nos permite utilizar los atributos y métodos del valor almacenado sin necesidad de un casteo.
11.¿Para qué se usan los operadores nameof() y sizeof()?
El primero nos retorna el nombre de la variable, y el segundo su tamaño en memoria
Metodos Estaticos
1.¿Qué propone el principio DRY?
Toda pieza de conocimiento debe tener una representación única, inequívoca y fidedigna dentro de un sistema
2.¿Qué modificadores podemos aplicar a un método y qué efecto tienen?
Public: accesible desde cualquier parte
Private: solo accesible desde dentro del mismo tipo
Internal: solo accesible desde dentro del mismo ensamblado / proyecto
Protected: solo accesible desde dentro del mismo tipo o tipos derivados
3.¿Qué significa refactorizar?

es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna
sin cambiar su comportamiento externo. Esta técnica consiste en modificar el código fuente para mejorar su
consistencia interna y su claridad. La refactorización no arregla errores ni añade funcionalidad, sólo mejora la
comprensión, estructura y diseño del código.

Namespaces
1.¿Qué es un namespace y cuál es su función principal?
Son una agrupación lógica de clases y otros elementos del código fuente. Así como clasificamos nuestros
archivos dentro de distintos directos del sistema operativo, podemos organizar el código fuente de C# y sus
componentes en distintos espacios de nombres.
2.¿Puedo tener distintos namespaces dentro de un mismo proyecto o ensamblado de .NET?
Si
3.¿Para qué se usa la directiva using?
Permite la especificación de una llamada a un método sin el uso obligatorio de un nombre completamente
cualificado (nombre completo incluyendo el espacio de nombres).
4.¿Para qué se usa la directiva alias?
Permite utilizar un nombre distinto para un espacio de nombres. Se suele utilizar para abreviar nombres largos.

Programación orientada a objetos


1. ¿Qué es un paradigma? ¿Qué propone el paradigma orientado a objetos? Un paradigma es un enfoque o
conjunto de conceptos y reglas que guían la resolución de problemas en un campo específico. El paradigma
orientado a objetos propone modelar el mundo real a través de objetos que tienen atributos y métodos,
fomentando la encapsulación, la herencia y el polimorfismo.
2. Nombre a los pilares del paradigma orientado a objetos Los pilares del paradigma orientado a objetos son:.
Abstracción, Encapsulación, Herencia, Polimorfismo
3. Describa el pilar de la abstracción y dé un ejemplo que no se haya mencionado en los apuntes o en clase. La
abstracción se refiere a la capacidad de simplificar y modelar objetos del mundo real en representaciones más
simples. Por ejemplo, en un juego de simulación de autos, la abstracción podría representar un auto como un
objeto con atributos como velocidad y posición, sin preocuparse por los detalles internos del motor.
4. ¿Qué es una clase? Una clase es un plano o una plantilla para crear objetos. Define la estructura y el
comportamiento que los objetos creados a partir de ella tendrán. Contiene atributos y métodos que
caracterizan a esos objetos.
5. ¿Qué es un objeto? ¿En qué se relacionan con las clases? Un objeto es una instancia concreta de una clase.
Representa un elemento específico del mundo real que sigue la estructura y el comportamiento definido por
esa clase. Los objetos se crean a partir de las clases.
6. ¿Qué significa instanciar un objeto? Instanciar un objeto significa crear una nueva instancia u ocurrencia de
una clase. Es como tomar el plano de una casa (la clase) y construir una casa real (el objeto) basada en ese
plano.
7. Explique qué es la abstracción en el contexto de programación orientada a objetos y cuál es su relación con las
clases. La abstracción en la programación orientada a objetos implica simplificar y modelar el mundo real en
representaciones más simples, como clases y objetos. Las clases son la forma concreta de aplicar la
abstracción, ya que definen la estructura y el comportamiento de los objetos.
8. ¿Qué son los atributos o estado de un objeto? Los atributos (también llamados estado) de un objeto son
variables que almacenan datos que caracterizan al objeto. Representan las propiedades o características del
objeto.
9. ¿Qué son los métodos de un objeto? Los métodos de un objeto son funciones o procedimientos asociados a la
clase que definen el comportamiento del objeto. Pueden modificar sus atributos y realizar acciones específicas
10. ¿Qué es un método estático? Un método estático es un método que pertenece a la clase en lugar de a una
instancia específica de la clase. Puedes llamar a un método estático sin crear un objeto de la clase y suelen
utilizarse para operaciones que no dependen del estado de un objeto en particular.
11. ¿En qué se diferencia de los métodos de instancia (no estáticos)? Los métodos estáticos pertenecen a la clase
en sí y se pueden llamar sin crear una instancia de la clase. Los métodos de instancia pertenecen a objetos
individuales creados a partir de la clase y se llaman en el contexto de una instancia específica.
12. ¿Qué es una clase estática? Una clase estática es una clase que no se puede instanciar, y todos sus miembros
son estáticos. Los miembros estáticos de una clase estática se asocian con la clase en sí y no con instancias
individuales.
13. ¿En qué se diferencia de las clases no estáticas? Las clases no estáticas pueden ser instanciadas para crear
objetos, mientras que las clases estáticas no pueden ser instanciadas y solo pueden contener miembros
estáticos.
14. ¿Puedo tener miembros estáticos en clases no-estáticas? Sí, puedes tener miembros estáticos en clases no
estáticas. Estos miembros estarán asociados con la clase en lugar de con las instancias individuales de la
clase.
15. ¿Puedo tener miembros no-estáticos en clases estáticas? No, no puedes tener miembros no estáticos en
clases estáticas. Todas las propiedades y métodos en una clase estática deben ser estáticos.
16. ¿Necesito instanciar un objeto de la clase para llamar a sus métodos estáticos? No, no necesitas instanciar un
objeto de la clase para llamar a sus métodos estáticos. Puedes llamarlos directamente en la clase.
17. ¿Cuántos valores distintos pueden existir para un atributo estático y cuántos de uno no-estático cuando se
crearon 5 instancias de la clase? Para un atributo estático, existe un único valor compartido entre todas las
instancias de la clase. Para un atributo no estático, cada instancia tiene su propio valor, por lo que habría 5
valores distintos si se crearan 5 instancias.
18. ¿Se puede usar el operador “this” dentro de un método estático? No, el operador "this" se refiere a la instancia
actual de un objeto, por lo que no se puede utilizar dentro de un método estático, ya que estos métodos no
operan en el contexto de una instancia.
19. ¿Se puede acceder a miembros no-estáticos desde un método estático de la misma clase? Sí, es posible
acceder a miembros no estáticos desde un método estático de la misma clase, pero necesitas una instancia de
la clase para hacerlo.
20. ¿Se puede acceder a miembros estáticos desde un método de instancia? Sí, puedes acceder a miembros
estáticos desde un método de instancia utilizando el nombre de la clase.
21. ¿Se pueden declarar variables estáticas dentro de un método (locales)? No, no puedes declarar variables
estáticas dentro de un método. Las variables estáticas se definen a nivel de clase y no a nivel de método.
22. ¿Los objetos se crean en tiempo de diseño, de compilación o de ejecución? Los objetos se crean en tiempo de
ejecución, cuando se instancian a partir de una clase.
23. ¿Cuántos objetos de tipo Alumno puedo tener en mi sistema? Puedes crear tantos objetos de tipo Alumno
como necesites en tiempo de ejecución, no hay un límite específico.
24. ¿Y cuántas clases Alumno puedo tener en mi sistema? (Dentro de un mismo namespace). Puedes tener
múltiples clases Alumno dentro de un mismo namespace, pero cada clase debe tener un nombre único dentro
de ese namespace.
25. Explique el ciclo de vida de un objeto. El ciclo de vida de un objeto consta de tres partes: creación
(instanciación), utilización (donde se accede y modifica), y destrucción (cuando el objeto ya no es necesario y
es recolectado por el Garbage Collector).
26. Detalle las funciones del operador new, del constructor y del Garbage Collector. El operador new se utiliza para
crear una nueva instancia de un objeto. El constructor inicializa el objeto cuando se crea. El Garbage Collector
se encarga de liberar la memoria de los objetos que ya no son accesibles.
27. ¿En qué segmento de memoria se almacenan los tipos valor (value type) y en cuál los tipos por referencia
(reference type)? Los tipos valor se almacenan en la stack, mientras que los tipos por referencia se almacenan
en el heap.
28. ¿En cuál interfiere al Garbage Collector? Compare y describa: Destrucción determinista y no determinista.
Asocie con el concepto de variables y objetos. El Garbage Collector interfiere en la destrucción no determinista
de objetos en memoria. La destrucción determinista se refiere a la liberación explícita de recursos (como cerrar
un archivo) y no está directamente relacionada con la gestión de objetos en memoria.
29. ¿Qué es una constante? Una constante es un valor que no cambia durante la ejecución de un programa. Es
una variable cuyo valor se establece en tiempo de compilación y no puede modificarse durante la ejecución.
30. ¿Se puede declarar constantes estáticas (static const)? En algunos lenguajes, como C++, puedes declarar
constantes estáticas. Sin embargo, en C#, las constantes ya son estáticas por naturaleza y se definen con la
palabra clave const.
31. ¿Cuándo se asigna el valor a las constantes (tiempo de compilación o ejecución)? El valor de una constante se
asigna en tiempo de compilación y no puede cambiarse en tiempo de ejecución.
32. ¿Dos objetos del mismo tipo pueden tener distintos valores en una misma constante? Relacione con atributos
de instancia y estáticos. No, dos objetos del mismo tipo no pueden tener distintos valores en una misma
constante. Las constantes se aplican a nivel de clase o tipo, no a nivel de instancia, por lo que son compartidas
por todas las instancias de la clase.
33. ¿Qué es un constructor? ¿Cuál es su función? Un constructor es un método especial de una clase que se
llama cuando se crea una instancia de esa clase. Su función es inicializar los atributos y establecer un estado
inicial coherente para el objeto.
34. ¿Qué es el constructor por defecto? El constructor por defecto es un constructor que se genera
automáticamente si no se define ningún otro constructor en una clase. No toma parámetros y proporciona una
inicialización básica.
35. ¿Qué sucede con el mismo cuando declaramos un constructor nuevo en la clase? ¿Con qué valores se cargan
los atributos cuando se llama al constructor por defecto? Cuando se declara un constructor nuevo en la clase,
el constructor por defecto ya no se genera automáticamente. Si se llama al constructor por defecto, los
atributos se inicializarán con los valores predeterminados de sus tipos.
36. ¿Qué es y para qué sirve un constructor estático? Un constructor estático es un método estático de una clase
que se ejecuta una sola vez cuando la clase se carga en memoria. Se utiliza para inicializar datos estáticos o
realizar tareas de inicialización que deben hacerse una vez antes de crear instancias de la clase.
37. ¿En qué se diferencia su sintaxis de los constructores de instancia? La sintaxis de un constructor estático se
diferencia en que no lleva un modificador de acceso (como public o private) y utiliza la palabra clave static.
38. ¿Cuántas veces se puede llamar a un constructor estático? ¿Quién lo puede llamar? Un constructor estático se
llama automáticamente una sola vez cuando se carga la clase en memoria. No puede ser llamado
explícitamente por el código cliente.
39. ¿Se ejecutará primero un constructor estático o uno de instancia? El constructor estático se ejecuta primero,
antes de que se llame a cualquier constructor de instancia o se acceda a cualquier miembro de la clase.

Sobrecarga
1. ¿Qué significa sobrecargar un método o constructor? Sobrecargar un método o constructor significa tener
múltiples definiciones del mismo con el mismo nombre en una clase, pero con diferentes parámetros. Cada
definición tiene una lista de parámetros única.
2. ¿Qué debe cambiar para que la sobrecarga de un método o constructor sea válida? Para que la sobrecarga
sea válida, al menos uno de los siguientes debe ser diferente en cada definición:
- El número de parámetros.
- El tipo de al menos uno de los parámetros.
3. ¿La sobrecarga se resuelve en tiempo de ejecución o en tiempo de compilación? La sobrecarga se resuelve en
tiempo de compilación, cuando el compilador determina cuál de las definiciones sobrecargadas se debe llamar
según el contexto de la llamada.
4. ¿Cómo se distingue a qué sobrecarga llamar? El compilador distingue a qué sobrecarga llamar basándose en
el número, tipo y orden de los argumentos proporcionados en la llamada al método o constructor.
5. ¿Se tiene en cuenta el nombre o identificador de los parámetros de entrada para una sobrecarga? No, el
nombre de los parámetros no se tiene en cuenta en la sobrecarga; solo importa su tipo, número y orden.
6. ¿Se tiene en cuenta el modificador de visibilidad para una sobrecarga? No, el modificador de visibilidad (como
public o private) no afecta la sobrecarga. Dos métodos o constructores pueden tener diferentes modificadores
de visibilidad y seguir siendo sobrecargas válidas.
7. ¿Se tiene en cuenta el tipo de retorno para una sobrecarga? No, el tipo de retorno no se tiene en cuenta en la
sobrecarga. Dos definiciones con la misma lista de parámetros pero con tipos de retorno diferentes no son
consideradas sobrecargas válidas.
8. ¿Los métodos pueden tener el mismo nombre que otros elementos de una misma clase? (atributos,
propiedades, etc) No, en una misma clase no se pueden tener elementos con el mismo nombre,
independientemente de si son métodos, atributos o propiedades.
9. Mencione dos razones por las cuales se sobrecargan los métodos. Las dos razones principales para
sobrecargar métodos son:
1. Proporcionar una funcionalidad similar pero con diferentes tipos de entrada o parámetros.
2. Ofrecer una interfaz más amigable o intuitiva para los usuarios, permitiéndoles utilizar el método de
diferentes maneras según sus necesidades.
10. ¿Los métodos estáticos pueden ser sobrecargados? Sí, los métodos estáticos pueden ser sobrecargados de la
misma manera que los métodos de instancia.
11. ¿Agregar el modificador “static” sin cambiar los parámetros de entrada es una sobrecarga válida? No, agregar
el modificador "static" sin cambiar los parámetros de entrada no es una sobrecarga válida. La sobrecarga se
basa en los parámetros, no en los modificadores.
12. ¿Agregar un modificador “out” o “ref” en la firma del método sin cambiar nada más es una sobrecarga válida?
No, agregar los modificadores "out" o "ref" sin cambiar nada más en la firma del método no es una sobrecarga
válida. Los modificadores no afectan la sobrecarga.
13. ¿Cambiar el tipo de retorno sin cambiar los parámetros de entrada es una sobrecarga válida? No, cambiar el
tipo de retorno sin cambiar los parámetros de entrada no es una sobrecarga válida. La sobrecarga se basa
únicamente en los parámetros.
14. ¿Se pueden sobrecargar los constructores estáticos? ¿Por qué? No, los constructores estáticos no pueden ser
sobrecargados. Esto se debe a que los constructores estáticos se ejecutan automáticamente cuando se carga
la clase en memoria y no se llaman explícitamente.
15. ¿Se puede llamar a un constructor estático con el operador “this()”? No, no se puede llamar a un constructor
estático con el operador "this()" ni con "new" ya que son invocados automáticamente.
16. ¿Se puede llamar a constructores de otras clases con el operador “this()”? No, el operador "this()" solo se
puede usar para llamar a constructores dentro de la misma clase. Para llamar a constructores de otras clases,
se utiliza "base()" en el caso de herencia.
17. ¿Se puede sobrecargar un constructor privado? Sí, se pueden sobrecargar los constructores privados dentro
de la misma clase. La accesibilidad privada permite que estos constructores sean invocados solo desde dentro
de la clase.
18. ¿Qué es un operador? Un operador es un símbolo o palabra reservada que realiza una operación específica
en operandos para producir un resultado. Por ejemplo, "+" es un operador de suma.
19. ¿En qué se diferencian un operador unario y un operador binario? De un ejemplo de cada uno. Un operador
unario trabaja con un solo operando, como el operador de negación "-". Un operador binario trabaja con dos
operandos, como el operador de suma "+".
20. ¿Qué varía en la sintaxis de la sobrecarga de operadores unarios y binarios? La sintaxis de la sobrecarga de
operadores unarios y binarios varía en la firma del método de sobrecarga. Para operadores unarios, no se
necesita un segundo operando, mientras que para operadores binarios, se necesitan dos operandos.
21. ¿Se pueden sobrecargar los operadores de operación y asignación (+=, -=,=, /=)? ¿Por qué? Sí, los
operadores de operación y asignación se pueden sobrecargar. Esto permite definir el comportamiento
personalizado de dichos operadores en tipos personalizados.
22. ¿Cuál es la diferencia entre un operador de conversión implícito y uno explícito? (En finalidad, declaración y
aplicación) Un operador de conversión implícito se utiliza para convertir automáticamente un tipo en otro
cuando sea necesario y es seguro. Un operador de conversión explícito requiere una conversión explícita por
parte del programador para convertir un tipo en otro.
23. Los operadores de casteo “(T)x” no se pueden sobrecargar. ¿Cuál es la alternativa? La alternativa es definir
métodos de conversión explícita o implícita en la clase para permitir la conversión personalizada entre tipos.
24. ¿Cuál es la diferencia entre castear (casting), convertir (converting) y parsear (parsing)? Castear (casting) se
refiere a la conversión de tipos en tiempo de compilación utilizando operadores de casting como (int)x.
Convertir (converting) se refiere a la conversión entre tipos en tiempo de ejecución utilizando métodos de
conversión definidos en la clase.
Parsear (parsing) se utiliza para convertir datos de cadena en otros tipos, generalmente utilizando métodos de
análisis como Int32.Parse().

Windows Form
1. ¿Los formularios son objetos? Sí, los formularios en Windows Forms son objetos. Son instancias de la clase
System.Windows.Forms.Form.
2. ¿En qué parte del código se instancia el primer formulario? El primer formulario generalmente se instancia en
el método Main() del programa, que se encuentra en la clase Program.cs o en el punto de entrada principal del
proyecto.
3. ¿De qué clase heredan/derivantodos los formularios? Todos los formularios en Windows Forms derivan de la
clase base System.Windows.Forms.Form.
4. ¿Qué es una partial class o clase parcial? Una partial class o clase parcial es una característica de C# que
permite dividir la definición de una clase en múltiples archivos. Esto es útil para separar la lógica de
presentación y el código generado automáticamente.
5. ¿Puedo agregar parámetros de entrada al constructor de la clase del formulario? ¿Puedo sobrecargarlo? ¿Por
qué? Sí, puedes agregar parámetros de entrada al constructor de la clase del formulario y sobrecargarlo según
tus necesidades. Esto es útil para pasar datos o configuraciones específicas al formulario al crear instancias.
6. ¿Se pueden declarar nuevos campos/atributos/propiedades dentro del formulario? ¿Por qué? Sí, puedes
declarar nuevos campos, atributos y propiedades dentro del formulario. Esto te permite mantener datos y lógica
específica del formulario, como controles personalizados o datos relacionados con la interfaz de usuario.
7. ¿Cuál es la diferencia entre los métodos Show y ShowDialog? El método Show() muestra un formulario de
manera no modal, lo que significa que permite al usuario interactuar con otros formularios mientras el
formulario está visible. El método ShowDialog() muestra un formulario de manera modal, lo que bloquea la
interacción con otros formularios hasta que se cierre el formulario modal.
8. ¿Qué es un formulario MDI? ¿Y uno SDI? MDI (Interfaz de Documento Múltiple) se refiere a una aplicación que
permite abrir múltiples documentos o ventanas secundarias dentro de una ventana principal. SDI (Interfaz de
Documento Único) se refiere a una aplicación que muestra un único documento o ventana secundaria en una
ventana principal.
9. ¿Con qué propiedad indico que un formulario es un contenedor MDI? Para indicar que un formulario es un
contenedor MDI, debes establecer la propiedad IsMdiContainer del formulario en true.
10. ¿Modificando qué propiedad del formulario hijo indico cuál es el formulario MDI padre? Puedes establecer la
propiedad MdiParent del formulario hijo para indicar cuál es el formulario MDI padre al que debe estar
acoplado.
11. ¿Qué es un evento en Windows Forms? Mencione algunos eventos de los controles o de los formularios y
explique cómo trabaja con ellos. ¿Cuál es el manejador del evento? Un evento en Windows Forms es una
acción o suceso que ocurre en un control o formulario, como hacer clic en un botón o cambiar el texto en un
cuadro de texto. Algunos eventos comunes incluyen Click, MouseDown, KeyPress, y muchos más. Para
responder a un evento, debes escribir un manejador de eventos que es un método que se ejecuta cuando
ocurre el evento.
12. Explique el ciclo de vida de los formularios asociándolo a sus eventos. El ciclo de vida de un formulario en
Windows Forms incluye los siguientes eventos clave:
Load: Se dispara cuando el formulario se carga por primera vez.
Activate: Se dispara cuando el formulario se convierte en el formulario activo.
Deactivate: Se dispara cuando el formulario pierde el foco.
FormClosing: Se dispara antes de que el formulario se cierre.
Closed: Se dispara después de que el formulario se cierra.
Dispose: Se dispara cuando el formulario se elimina de la memoria.
Arrays
1. ¿Qué es un array "jagged"? ¿En qué valor se inicializan sus elementos? Un array "jagged" es un array
multidimensional irregular en el que cada subarray puede tener una longitud diferente. Los elementos de un
array "jagged" se inicializan en null por defecto.
2. ¿Los arrays son objetos? Sí, los arrays son objetos en C#. Son instancias de la clase System.Array.
3. ¿Qué significa que en C# los arrays son de "base-cero"? Significa que los índices de los arrays comienzan en
0. El primer elemento tiene el índice 0, el segundo tiene el índice 1, y así sucesivamente.
4. Los arrays implementan la interfaz Enumerable, ¿qué es lo que esto les permite hacer? Al implementar la
interfaz Enumerable, los arrays pueden ser recorridos utilizando bucles foreach y se pueden usar en consultas
LINQ, lo que facilita la manipulación y búsqueda de datos en los arrays.
5. ¿Cómo se declara e instancia un array multidimensional? Puedes declarar e instanciar un array
multidimensional utilizando la siguiente sintaxis:
csharp
tipo[,] nombreArray = new tipo[filas, columnas];
6. ¿El método Array.Resize cambia el tamaño de la instancia de array proveída o genera una nueva con distinto
tamaño? ¿Por qué? El método Array.Resize cambia el tamaño de la instancia de array proveída. No crea un
nuevo array, sino que ajusta el tamaño del array existente. Esto se debe a que los arrays tienen una longitud
fija una vez creados.

Colecciones
1. ¿Cuál es la diferencia entre colecciones y matrices? Las colecciones son estructuras de datos dinámicas que
pueden cambiar de tamaño durante la ejecución, mientras que las matrices (arrays) tienen un tamaño fijo una
vez creadas.
2. ¿Cuál es la diferencia entre las colecciones genéricas y las no-genéricas? Las colecciones genéricas,
introducidas en versiones más recientes de C#, son tipos seguros en tiempo de compilación y proporcionan un
rendimiento mejorado al evitar conversiones de tipo. Las colecciones no genéricas almacenan objetos de tipo
"object" y requieren conversiones de tipo en tiempo de ejecución.
3. ¿Cuál es la diferencia entre una cola (Queue) y una pila (Stack). Asocie con los conceptos "FIFO" y "LIFO".
Una cola (Queue) sigue el principio FIFO (First-In-First-Out), lo que significa que el primer elemento en entrar
es el primero en salir. Una pila (Stack) sigue el principio LIFO (Last-In-First-Out), lo que significa que el último
elemento en entrar es el primero en salir.
4. Describa las siguientes colecciones: List, Dictionary, SortedList, ArrayList, Hashtable. Clasifíquelas en
genéricas o no-genéricas.
List: Colección genérica que almacena una secuencia ordenada de elementos.
Dictionary: Colección genérica que almacena pares clave-valor.
SortedList: Colección genérica que almacena pares clave-valor ordenados por clave.
ArrayList: Colección no genérica que almacena objetos de tipo "object".
Hashtable: Colección no genérica que almacena pares clave-valor.
5. ¿Por qué piensa que las colas y pilas no traen un método para ordenarlas? Piense en el uso de dichas
colecciones. Las colas y pilas están diseñadas para seguir el principio FIFO y LIFO, respectivamente, y no
están destinadas a ser ordenadas. Su uso principal es gestionar elementos en un orden específico y garantizar
que los elementos se retiren en el orden correcto.
6. ¿Cuál es la diferencia entre colas y pilas genéricas y no-genéricas? Las colas y pilas genéricas permiten
almacenar elementos de un tipo específico de manera segura en tiempo de compilación, mientras que las
colas y pilas no genéricas almacenan objetos de tipo "object", lo que requiere conversiones de tipo en tiempo
de ejecución y puede generar errores si se almacenan tipos incorrectos.

Encapsulamiento
1. Defina encapsulamiento / encapsulación en el contexto del paradigma orientado a objetos. El encapsulamiento
es uno de los conceptos fundamentales de la programación orientada a objetos (POO) y se refiere a la práctica
de ocultar los detalles internos de un objeto y exponer solo las partes relevantes para su uso externo. Esto se
logra definiendo atributos privados y proporcionando métodos públicos (getters y setters) para acceder y
modificar esos atributos de manera controlada.
2. Defina cada nivel de ocultamiento / accesibilidad de la programación orientada a objetos. Incluya la función del
modificador internal en C#. En C# y otros lenguajes orientados a objetos, los niveles de ocultamiento o
accesibilidad son:
public: Los miembros son accesibles desde cualquier lugar.
private: Los miembros solo son accesibles desde dentro de la clase que los contiene.
protected: Los miembros son accesibles desde dentro de la clase que los contiene y desde clases derivadas.
internal: Los miembros son accesibles solo desde dentro del mismo ensamblado (assembly).
El modificador internal en C# permite que los miembros de una clase sean accesibles desde cualquier clase
dentro del mismo ensamblado, pero no desde ensamblados externos.

Propiedades
1. ¿Qué es y para qué sirve una propiedad? Una propiedad es un miembro de una clase que proporciona un
mecanismo para leer (get) o escribir (set) el valor de un atributo privado de la clase. Las propiedades permiten
el encapsulamiento y la validación de datos, controlando el acceso a los atributos de la clase.
2. ¿Para qué sirve el descriptor de acceso get? El descriptor de acceso get se utiliza para obtener el valor de una
propiedad. Permite leer el valor del atributo privado o realizar algún cálculo antes de devolverlo.
3. ¿Para qué sirve el descriptor de acceso set? ¿Cuál es el papel de la palabra clave value? El descriptor de
acceso set se utiliza para establecer el valor de una propiedad. La palabra clave value se utiliza en el contexto
de set para representar el nuevo valor que se desea asignar a la propiedad. Permite realizar validaciones o
procesamientos antes de asignar el valor.

Enumerados
1. ¿Qué es un enumerado? ¿Cuál es su función? Un enumerado (enum) es un tipo de dato que permite definir un
conjunto de constantes con nombre. Su función es proporcionar un conjunto predefinido de valores que pueden
representar estados, opciones o valores específicos en un programa de manera más legible y mantenible.
2. ¿Un enumerado sólo puede estar anidado dentro de una clase? No, un enumerado puede estar definido en el
espacio de nombres (namespace) sin estar anidado dentro de una clase. Sin embargo, también puede estar
anidado dentro de una clase si se requiere ese nivel de encapsulación.
3. ¿Los tipos enumerados son de valor o de referencia? Los tipos enumerados (enums) son tipos de valor.
Representan un conjunto de valores constantes y se almacenan en la memoria como valores individuales
4. Por defecto, ¿cuál es el primer valor numérico de un enumerado? ¿Se pueden cambiar los valores por
defecto? Por defecto, el primer valor numérico de un enumerado es 0, y los siguientes valores incrementan en
1. Sin embargo, se pueden asignar valores personalizados a los miembros del enumerado, lo que permite
cambiar los valores por defecto.

Herencia
1. ¿Qué es la herencia en el contexto de la programación orientada a objetos? ¿Cuál es su propósito? La
herencia en programación orientada a objetos es un mecanismo que permite que una clase (clase derivada o
subclase) herede atributos y métodos de otra clase (clase base o superclase). El propósito de la herencia es
reutilizar y extender la funcionalidad de una clase existente, promoviendo la reutilización del código y la
organización jerárquica de las clases.
2. ¿Qué nombre recibe la clase que hereda y qué nombre recibe la clase que es heredada? La clase que hereda
se llama "clase derivada" o "subclase". La clase que es heredada se llama "clase base" o "superclase".
3. Explique el principio de sustitución de Liskov El principio de sustitución de Liskov establece que las instancias
de una clase derivada deben poder ser utilizadas en lugar de instancias de la clase base sin que se produzcan
efectos secundarios ni violaciones de la integridad del programa. Esto significa que una clase derivada debe
ser compatible en términos de comportamiento con su clase base.
4. ¿Qué significa que la herencia es transitiva? La herencia es transitiva en el sentido de que si la clase A hereda
de la clase B, y la clase B hereda de la clase C, entonces la clase A hereda indirectamente de la clase C. Esto
significa que la clase A obtiene propiedades y métodos tanto de la clase B como de la clase C.
5. ¿Se heredan los constructores? Sí, los constructores de la clase base se heredan en la clase derivada, pero no
se pueden llamar directamente desde la instancia de la clase derivada.
6. ¿Se heredan los miembros private de la clase base? No, los miembros privados (private) de la clase base no
se heredan en la clase derivada. Son inaccesibles desde la clase derivada.
7. ¿Qué es herencia múltiple? ¿Es posible en C#? ¿En qué se diferencia de la herencia simple? La herencia
múltiple es un concepto en el que una clase puede heredar miembros y comportamientos de múltiples clases
base. En C#, no es posible implementar herencia múltiple de clases. En su lugar, C# admite herencia de una
clase base única, pero permite la implementación de múltiples interfaces, lo que logra la reutilización de código
de manera más segura.
8. ¿Una clase pública puede heredar de una clase privada? No, una clase pública no puede heredar de una clase
privada. La clase base debe tener al menos un nivel de acceso igual o menos restrictivo que la clase derivada.
9. ¿Qué es una clase sellada (sealed)? Una clase sellada (sealed) es una clase que no puede ser heredada. Es
decir, no se pueden crear subclases de una clase sellada. Se utiliza para evitar la extensión de ciertas clases y
garantizar que su comportamiento permanezca inalterable.
10. ¿Una clase sellada puede heredar de otras clases (ser clase derivada)? No, una clase sellada no puede ser
una clase base ni heredar de otras clases. Es una clase final y no puede ser extendida.
11. ¿Cómo actúa el modificador “protected” en los miembros de la clase base para una clase derivada y cómo para
una clase no derivada? Relacionar la respuesta con los modificadores “public” y “private”. El modificador
"protected" permite que los miembros de la clase base sean accesibles desde la clase derivada, pero no desde
fuera de la jerarquía de herencia. Los miembros "protected" son como "public" dentro de la jerarquía de
herencia, pero como "private" fuera de ella.
12. ¿Qué pasa si la clase derivada no hace una llamada explícita a un constructor de la clase base? En esta
situación, ¿qué pasa si la clase base declaró explícitamente un constructor con parámetros de entrada? Si la
clase derivada no hace una llamada explícita a un constructor de la clase base, el compilador intentará
automáticamente llamar al constructor sin parámetros (constructor por defecto) de la clase base. Si la clase
base no tiene un constructor sin parámetros y solo tiene un constructor con parámetros, la clase derivada debe
llamar explícitamente a dicho constructor en su constructor.
13. La clase Alumno hereda de Persona. ¿Una instancia de Alumno es también de tipo Persona? Justifique. Sí,
una instancia de la clase Alumno también es de tipo Persona. Esto se debe a que Alumno hereda todos los
atributos y métodos de la clase Persona, por lo que puede ser tratada como una instancia de Persona además
de tener sus propios miembros específicos de Alumno.
14. La clase Alumno hereda de Persona. ¿Se puede hacer Persona persona = new Alumno()? ¿Por qué? Sí, se
puede hacer Persona persona = new Alumno();. Esto es posible debido a la relación de herencia, donde un
objeto de una clase derivada (Alumno) se puede asignar a una variable de la clase base (Persona). Sin
embargo, para acceder a los miembros específicos de Alumno, se necesita un casting explícito.
15. La clase Alumno hereda de Persona. ¿Se puede hacer Alumno alumno = new Persona()? ¿Por qué? No, no se
puede hacer Alumno alumno = new Persona();. Esto va en contra del principio de sustitución de Liskov, ya que
una instancia de la clase Persona no puede sustituir completamente a una instancia de la clase Alumno, ya que
Alumno puede tener miembros adicionales y comportamientos diferentes a los de Persona.

Polimorfismo
1. ¿Dónde reside la definición del método a sobrescribir? ¿Qué palabra clave se usa para definirlo? La definición
del método a sobrescribir reside en la clase base (superclase) y se utiliza la palabra clave virtual o abstract (en
caso de métodos abstractos) para indicar que el método puede ser sobrescrito en clases derivadas.

2. ¿Dónde reside la implementación del método sobrescrito? ¿Qué palabra clave se usa para implementarlo? La
implementación del método sobrescrito reside en la clase derivada (subclase) y se utiliza la palabra clave
override para indicar que se está proporcionando una implementación específica para ese método en la clase
derivada.
3. ¿La invocación de los métodos sobrescritos (override) se resuelve en tiempo de compilación o ejecución? ¿Y la
de los métodos sobrecargados (overload)? La invocación de los métodos sobrescritos se resuelve en tiempo
de ejecución (late binding), mientras que la de los métodos sobrecargados se resuelve en tiempo de
compilación (early binding).
4. ¿Cambia la firma de los métodos cuando los sobrescribimos (override)? ¿Y cuando los sobrecargamos
(overload)? Cuando sobrescribimos un método (override), la firma (nombre, tipo de retorno y parámetros) debe
ser la misma que la del método en la clase base. Y cuando sobrecargamos un método (overload), la firma debe
ser diferente, lo que significa que al menos uno de los siguientes elementos debe ser diferente: nombre, tipo de
retorno o lista de parámetros.
5. ¿Los métodos sobrescritos (override) se encuentran en la misma clase? ¿Y los métodos sobrecargados
(overload)? Los métodos sobrescritos (override) se encuentran en diferentes clases: el método base en la
clase base y el método sobrescrito en la clase derivada. Y los métodos sobrecargados (overload) pueden
encontrarse en la misma clase, donde varios métodos con el mismo nombre tienen parámetros diferentes.
6. ¿Qué es el polimorfismo en el contexto de la programación orientada a objetos? El polimorfismo es un
concepto que permite que objetos de diferentes clases se comporten de manera similar a través de una
interfaz común. Permite que se invoque un método en una clase base y, en tiempo de ejecución, se ejecute la
implementación específica de ese método en una clase derivada si se ha sobrescrito.
7. ¿Todos los objetos en C# son polimórficos? ¿Por qué? Sí, en C#, todos los objetos son polimórficos porque
heredan implícitamente de la clase base System.Object, lo que les permite ser tratados como objetos genéricos
y se pueden utilizar en polimorfismo.

Clases y miembros abstractos


1. ¿Qué modificador debo utilizar si quiero declarar un método que pueda ser sobrescrito en las clases
derivadas? Debes utilizar el modificador virtual en la definición del método en la clase base.
2. ¿Qué modificador debo utilizar si quiero declarar un método que deba ser sobrescrito en las clases derivadas?
Debes utilizar el modificador abstract en la definición del método en la clase base.
3. ¿Qué es una clase abstracta? ¿Cuál es su función? Una clase abstracta es una clase que no se puede
instanciar directamente y que se utiliza como base para otras clases. Su función es proporcionar una estructura
común y definir métodos que deben ser implementados por las clases derivadas. También puede contener
métodos abstractos que deben ser sobrescritos por las clases derivadas.
4. Las clases no-abstractas que derivan de una clase abstracta, ¿deben implementar todos sus métodos
abstractos? ¿Por qué? Sí, las clases no-abstractas que derivan de una clase abstracta deben implementar
todos sus métodos abstractos. Esto es una obligación, ya que los métodos abstractos no tienen una
implementación predeterminada y deben ser definidos en las clases derivadas.
5. Las clases abstractas que derivan de una clase abstracta, ¿deben implementar todos sus métodos abstractos?
¿Por qué? No necesariamente, las clases abstractas que derivan de otra clase abstracta pueden optar por no
implementar algunos de los métodos abstractos, siempre que estas clases abstractas también sean heredadas
por clases concretas que proporcionen implementaciones para esos métodos abstractos.
6. ¿Se pueden declarar miembros abstractos en clases no-abstractas? ¿Por qué? No, no se pueden declarar
miembros abstractos en clases no-abstractas. Los miembros abstractos deben estar en clases abstractas, ya
que las clases no-abstractas deben proporcionar implementaciones concretas para todos los métodos y
propiedades.
7. ¿Para sobrescribir un método se debe heredar de una clase abstracta? ¿Por qué? Sí, para sobrescribir un
método, debes heredar de una clase base que tenga ese método marcado como virtual o abstract. La herencia
de una clase abstracta es una forma común de habilitar la sobrescritura de métodos en clases derivadas.

PARCIAL

También podría gustarte