0% encontró este documento útil (0 votos)
109 vistas85 páginas

Curso C#

Este documento proporciona una introducción a los conceptos básicos de programación en C#, incluyendo diferentes tipos de aplicaciones (apps de consola, apps de escritorio y apps web), el uso de Visual Studio, la sintaxis básica de C# como declaración de variables, tipos de datos primitivos, operadores aritméticos, métodos y más. Explica conceptos como ámbito de variables, paso de parámetros, conversión de tipos, uso de constantes y sobrecarga de métodos.

Cargado por

mrapolo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
109 vistas85 páginas

Curso C#

Este documento proporciona una introducción a los conceptos básicos de programación en C#, incluyendo diferentes tipos de aplicaciones (apps de consola, apps de escritorio y apps web), el uso de Visual Studio, la sintaxis básica de C# como declaración de variables, tipos de datos primitivos, operadores aritméticos, métodos y más. Explica conceptos como ámbito de variables, paso de parámetros, conversión de tipos, uso de constantes y sobrecarga de métodos.

Cargado por

mrapolo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Curso C#

Cap. 2 primera aplicación

Visual studio

Apps de consola (se ejecutan en consola)

Apps de escritorio

Existe una GUI interfás gráfica de usuario

Apps web

Se ejecutan en un navegador

Distingue mayus y minúsculas

Lo que esté dentro de {} son bloques

Está formado por sentencias o instrucciones, todas están termiandas por “;”

Intelisense: a medida que se programa, el entorno te ayuda con menús desplegables para que
elijas la opción mas adecuada

NO PUEDE HABER DOS CLASES CON EL MISMO NOMBRE DENTRO DE LA MISMA APLICACIÓN

Clases propias:

Clase predefinida: biblioteca de clases o API

using System; para utilizar todas las clases en su interior (poner desde el principio
Cap. 3

Comentarios // en una sola línea o /* */ si es largo

Dos barras (//) hace que los comandos se invaliden y se convierte en comentario

Igual con /**/

Estos botones convierten en comentario las líneas

Y con el segundo botón se quitan los comentarios


Los identificadores comeinzan con una letra o un guión pero no como un número

Poner sangría dentro de los bloques de comando por jerarquía

Ep. 4 Sintáxis básica II

Tipos d edatos

Variables: declaración e iniciación

Convenciones y buenas prácticas con variables


Primitivos:

Enteros: sin decimales

Reales: Con decimales

Booleanos: expresan condiciones lógicas

Srtings es el textooo

y char se utilizan para texto

Char:
Tipo utf16 (codificación numérica de texto).

:::Variables:::

Es un espacio en la memoria Ram del ordenador donde se almacena el valor que podrá cambiar
durante la ejecución del programa

C# obliga a elegir que tipo de tamaño se utilizará, así como especificar la variable (tipo de dato)

En cuanto termina el programa se libera el espacio

Al dar nombre a las variables (todas tienen que tener nombre: edad, teléfono etc.)

 No comenzar con (_) Guion bajo


 No crear mas de una variable que se diferencien solo con una letra
 Las mayus y minus son diferentes
 Comenzar el nombre de la variable con minúscula
 Si el nombre de la variable está compuesto por mas de una palabra, comenzar la segunda
con mayúscula (CamelCase) (edadAlumno, edadPersona)
 Siempre acaba con “;”
 No utilizar notación húngara.

Que es declarar una variable?

Es crearla o construirla, para declarar debemos indicar el tipo de dato que va a almacenar en su
interior y a continuación el nombre de la variable:

Ejemplo: int edad; (int es el tipo de dato)

Que es iniciar una variable?

Iniciar una variable es asignar un valor a la misma

Ejemplo: edad=28
Existe la posibilidad de declarar e iniciar en la misma instrucción

Ejemplo: int edad=28

En C# NO SE PUEDE UTILIZAR UNA VARIABLE QUE NO SE HA INICIADO

Sin poner su valor no se puede iniciar

Si no tiene valor la variable se subraya de verde

Se leen las instrucciones de arriba abajo (flujo de ejecución


CAP 5.

Operadores aritméticos

Suma +

Resta –

Multiplicación *

División /

Residuo / módulo %

Solo se usan con números, excepto la suma, sirve para concatenar strings

Al usar “(++)” o “(--)” sumar o restar valor numérico


[Link](5/2); da como resultado 2

[Link](5.0/2.0); da como resultado 2.5

Al usar enteros el resultado es entero, al usar decimales el resultado es decimales.


[Link](9%3); da como resultado 0 por que ese es el residuo

int edad = 19;

[Link]("Tu edad es de " + edad + " años");

Tu edad es de 19 años

Interpolación de strings
[Link]($"Tu edad es de {edad} años");

Tu edad es de 19 años

Operador incremento y decremento

Como suffijo si es antes del console

Prefijo si es durante el console


Cap# 6 sintaxis básica IV

Operador “=”

Declaración implícita de variables

Conversiones implícitas y explícitas


double temperatura = 34.5;

int temperaturaMadrid;

//conversión explícita
//Casting

temperaturaMadrid = temperatura; //ERROR SINTAXIS


temperaturaMadrid = (int) temperatura; //Correcto

[Link](temperaturaMadrid);

(se hace la explicación de que se convierte en int por que no son compatibles

//conversión implícita

int habitantesCiudad = 1000000000;

long habitantesCiudad2023 = habitantesCiudad;

[Link](habitantesCiudad2023);
No ocupa hacerse conversión explícita, por que son compatibles
float pesoMaterial = 5.78F;

double pesoMaterialPrec = pesoMaterial;

[Link](pesoMaterialPrec);

Viendo como hacer la conversión de string a int


[Link]("Introduce el primer número");

int num1 = [Link]([Link]());

[Link]("Introduce el segundo número");

int num2 = [Link]([Link]());

[Link]($"El resultado es {num1 + num2}");


Cap# 7 Sintaxis básica, uso de constantes

conversión de texto a número

obj (string) -> int, double

[Link]() [Link]()

[Link]() deja a la espera de escribir en consola


[Link]("Introduce el primer número");

[Link]();

Este método no me devuelve numero, de devuelve texto.

Para combertirlo en numero sería


[Link]("Introduce el primer número");

int num1 = [Link]([Link]());


cap.#8

Definición y uso de constantes

 Variable : espacio de la memoria del ordenador donde se almacena un valor que puede
cambiar durante la ejecución del programa
 Constante: espacio de la memoria del ordenador donde se almacena un valor que no
podrá cambiar durante la ejecución del programa.

Constantes en mayus

Cw y dos veces tab escribe [Link]()

La respuesta es 7, si el {1} lo cambiamos por {0} nos muestra el 5

Aplicamos const (por que es una constante, pi no cambia su valor) double (por que son decimales)
Pi (nombre) = 3.1416

const double Pi = 3.1416;

[Link]("Introduce la medida del radio");

double radio = [Link]([Link]());

double area = radio * radio * Pi;

[Link]($"El área del círculo es: {area}");


Recuerda usar el “$” para concatenar con {}

CLASE MATH
[Link]("Introduce la medida del radio");

double radio = [Link]([Link]());

//double area = radio * radio * Pi;

double area = [Link](radio, 2)*Pi;

[Link]($"El área del círculo es: {area}");

Usando [Link] y [Link]

const double Pi = 3.1416;

[Link]("Introduce la medida del radio");

double radio = [Link]([Link]());

//double area = radio * radio * Pi;

double area = [Link]*[Link](radio,2);

[Link]($"El área del círculo es: {area}");


//sin embargo Const double Pi = 3.1416 ya no tendría sentido
Cap. 9 Métodos

¿Qué son?

¿Para que son?

¿Cuál es su sintaxis?

Que son?

Son un grupo de sentencias (instrucciones ) que tienen un nombre identificativo

Que realizan una tarea en concreto, las líneas que tienen que ver entre si se agrupan en un método

Para tenerlo identificado

Para que sirve?

Para realizar una tarea en concreto en un momento determinado. Es ejecutado hasta que es
llamado

¿Cuál es la sintaxis?

 Tipodevuelto nombredelMetodo (parámetros) {


Cuerpo del método
}

Int sumaNumeros() {

Int num1=7;

Int num2=9;

Int resultado=num1+num2;

return resultado;

*no se ejecutará hasta su llamada

*todos los métodos irán dentro de una clase

*se debe especificar el tipo devuelto y los parámetros

*no hay distinción entre métodos y funciones. En C# ambos términos son lo mismo.
Int sumaNumeros (int num1, int num2){

Int resultado=num1+num2;

Return resultado;

Void sumaNumeros () {

Int num1=7;

Int num2=9;

Int resultado=num1+num2;

[Link](resultado);

VOID JAMAS LLEVA RETURN marca error de compilación

Cap #10

Los métodos en C#

 Declaración y llamada a método void.


 Paso de parámetros

Todas las apps son métodos main, tiene la palabra void, no tiene return.
*Los métodos se realizan fuera del main

*tienen que ser del mismo tipo, es este caso “static”, si no se pone “static” y solo se deja “void”
marca error

*el flujo sigue siendo lineal hacia abajo, en el ejemplo, primero se realiza el método por que la
llamada está primero después del main, es decir, es la primera instrucción, al terminar ahora si se
ejecuta el cw desde el main.

Todo programa se ejecuta dentro del Main


namespace Practica_Metodos
{
internal class Program
{
static void Main(string[] args)
{

[Link](sumaNumeros(7, 9));

static int sumaNumeros(int num1, int num2)


{

//[Link]($"La suma de los números es: {num1 + num2}");

return num1 + num2;

}
}

El “return” marca el final del método, volviendo al Main sin importar lo que haya después en ese
mismo método

*Si tu método sobre pasa el limite de pantalla, no está bien diseñado


El método se puede simplificar.
Cap #11

Métodos en C#

Métodos “return”

Son aquellos que nos devuelven, nos dan datos cuando son llamados
Cap #12

 Ámbito o alcance de métodos y variables


 Sobrecarga de métodos

El código que está en un método entre las dos llaves {} se llama alcance

Ya que el método solo actúa dentro de esa llave

El flujo de ejecución (de arriba abajo) es igual en el método, a pesar de que es el mismo método,
primero se declara una variable y luego se imprime
Int numero 1 = 5;

Int numero2 = 7; son campos de clase

Pertenecer a una clase es a un menú, console es una clase, writeline pertenece a la clase console

Puede haber sobrecarga de métodos siempre y cuando tengan mas o menos parámetros, o el
return sea de diferente clase o el return sea diferente

static int suma(int operador1, int operador2) => operador1 + operador2;

static int suma(int numero1, double numero2) => numero1;

static int suma(int numero1, int numero2, int numero3, int numero4) => numero1 + numero2;
A pesar del mismo nombre, si se ponen los parámetros correctos (2, 3 o 4) se distingue a cual
llamar
Cap. #13

Ayudas de visual studio con métodos

Métodos con parámetros opcionales

Ambigüedades en llamadas a métodos

Visual studio manda ayuda


private static double Suma(int num1, double num2,double num3=0)
{
return num1 + num2 + num3;
}

Al poner =0 se hace opcional

El parámetro opcional tiene que ir si o si, después de los obligatorios


Cap. #14

Condicional IF

 Declaración de variables booleanas


 Uso de operadores booleanos
 Condicional IF

Que es la variable booleana?

R= Solo puede tomar como respuesta true o false


static void Main(string[] args)
{

bool haceFrio;

haceFrio = true;

[Link](haceFrio);

Al poner “!” (signo de exclamación) se invierte el resultado


static void Main(string[] args)
{

bool haceFrio;

haceFrio = true;

[Link](!haceFrio);

}
Al trabajar con IF, tenemos solo dos respuestas, o true o false.

Si es true, ejecuta el código dentro del if

Si es false se brinca esa línea ignorando por ser false


int edad = 15;

[Link]("Vamos a evaluar si eres mayór de edad");

if (edad >= 18)


{

Claramente la sintaxis sería Evaluar si la edad es mayor o igual a 18, viendo que edad es 15, entre
las llaves iría la instrucción de si es mayor o menor
Cap #15

Particularidades de la sintaxis del condicional if

Uso de operadores lógicos con if

Uso de else

Las llaves del if pueden omitirse si solo es una línea de comandos

La estructura else es un “y si no es verdad”

[Link]("Vamos a evaluar si puedes conducir un vehiculo");

bool carnet = false;

if (carnet == true)

[Link]("puedes conducir vehiculos");


else
[Link]("lo siento pero no puedes conducir vehiculos");

[Link]("Vamos a evaluar si puedes conducir un vehiculo");

[Link]("escribe tu edad");

int edad = [Link]([Link]());

[Link]("¿Tienes carnet?");

string carnet= [Link]();

if (edad >= 18 && carnet == "Si")


[Link]("puedes conducir vehiculos");

else
[Link]("no puedes conducir vehiculos");
Cap #16
Particularidades de la sintaxis del condicional IF
Uso de operadores lógicos con if
Uso de else if
No puedes tener un else sin un if

[Link]("Vamos a evaluar si puedes conducir un vehiculo");

[Link]("escribe tu edad");

int edad = [Link]([Link]());

if (edad < 18) [Link]("no puedes conducir vehiculos");


else
{
[Link]("¿Tienes carnet?");
string carnet = [Link]();
int compara = [Link](carnet,"si", true);
if (compara == 0) [Link]("Puedes condicr vehículos");
else [Link]("no puedes conducir vehiculos");
}
En este ejemplo tiene que pasar si o si los 3 parciales

En caso de que solo con que pase un parcial se puede calificar sería cambiar los “&&” por “||”
Cap #18

Condicional switch

-uso de switch
sintaxis
-Switch(expresión de control){
Case expresión constante
Ccodigo a realizar
Brak;
Case expresión constante:
Código a realizar
Break;

Default:
Código a realizar
Break:
}

[Link]("Elige medio de transporte (coche, tren, avión)");

string medioTransporte = [Link]();

switch (medioTransporte)
{

case "coche":
[Link]("velocidad media: 100 km/h");
break;
case "tren":
[Link]("velocidad media: 250 km/h");
break;
case "avión":
[Link]("velocidad media: 800 km/h");
break;
lo podemos usar en ves del if
se usa para listar casos y consecuencias del mismo
Cap. #19

Bucles. While

 Que son los bucles


o Bucle while

Permiten repetir la ejecución de líneas de código un numero determinado o indeterminado de


veces

Ventajas:

 Repetir el código rápida y sencilla


 Ahorro de tiempo a programar
 Permite trabajar con grandes volúmenes de datos
 Permite trabajar con arrays

Tipos de bucles

Determinados

FOR

indeterminados

WHILE

DO-WHILE

Bucle while

WHILE EN INGLES ES “MIENTRAS”

SE USA CUANDO NO SPEAMOS EL N°


DE VECES QUE SE REPETIRÁ EL
CÓDIGO ANTERIOR

Sintaxis

While(condición a evaluar) {

Código a repetir

}
while (respuesta != "no")

mientras respuesta sea diferente (=) a “no” se repite

while (resultado == 1 || resultado == 2 || resultado == 3)

dentro de los parámetros de while al pedir seleccionar uno de los 3, se tiene que especificar de forma individual
cual es el resultado esperado.
Cap. #21

Do While

static void Main(string[] args)


{

int z = 10;

do{
[Link]("impresión" + z);

z++;

} while (z < 10);

}
Cap. #22 Excepciones

Que son las excepciones

Que es el manejo de captura de excepciones

¿Que son las excepciones?


Cap. 23

Capturar varias excepciones

Try {

//código que s eintenta

catch (formatexception e){

//código que se ejecuta si hay excepción

Puede haber varios catch dentro para el try


do
{
intentos++;

try
{

minumero = [Link]([Link]());

}
catch (FormatException ex)
{

[Link]("No has introducido un valor numérico válido. Se toma como número introducido
el 0");
minumero = 0;

}catch (OverflowException e)
{
[Link]("Introduce solo los numeros de 1 a 100");
minumero = 0;
}

En lugar de poner muchos catch podemos poner excepciones genéricas

Herencia de excepciones
Al cambiar el format exception o el overflow exception, el exception captura todo

Al poner solo Exception el catch puede prescindir de este nombre, pero no es recomendable

hoy vi el format exception y el overflowException, pero si son muchos los exception puedes aplicar
solo el Exception que es como el papi, aunque no es del todo bien visto :v
cap. #24

Conflictos en el uso de varios catch

Captura de excepciones con filtros

Expresiones checked y unchecked

Después de una captura general como lo es EXCEPTION no puedes usar una en concreto como
format o overflow, debe ir antes

En este es un filtro de excepciones, seria algo como

Captura la exception e “cuando” el tipo e sea diferente de formatexception, ósea todas menos
format exception

En el int tiene un valor máximo claramente, entonces si ponemos

Int numero = [Link];

Int resultado = numero +20;

[Link](resultado):

No marca error, aunque si da un resultado erróneo, para que nos detecte el error hay que poner
“checked”:

Checked{

Int numero = [Link];

Int resultado = numero +20;

[Link](resultado):}
Cap. #25

Expresiones checked y unchecked

Configuración de excepciones con visual studio

Lanzamiento de excepciones con throw

Podemos abreviar el checked poniendolo antes del numero realizado:


int numero = [Link];
int resultado = checked(numero + 20);
[Link](resultado);

Por otro lado, si se tiene configurado el checked en el documento, podemos agregar un unchecked
y saltará esa excepción

Estos dos solo se pueden usar con int y long (no double o float)

COMPORTAMIENTO ANTE EXCEPCIONES

Si la excepción se muestra por que es fuera del rango especificaco puede utilirzarse un try catch
con
default: (en el caso de switch
throw new ArgumentOutOfRangeException()
Cap. #26

Uso de finally

Try{

//código que se intenta

} carch (FormatException e){

//código que se ejecuta si hay excepción

Finally{

//código que se ejecuta siempre

Se usa con Bases de datos

Lecturas de ficheros externos

Finally lo que hace es forzar si o si a que se realice un comando haya o no excepciones.


Cap. #27 POO

Que es la programación orientada a objetos

2 formas de programar

Programación orientada a procedimientos:

Algunos ejemplos de lenguajes: Fortran, Cobol, Basic etc.

Desventajas.

 Unidades de código muy grandes en aplicaciones complejas


 En aplicaciones complejas el código resultaba difícil de descifrar
 Poco reutilizable
 Si existe fallo en alguna línea de código, es probable que el programa caiga.
 Aparición frecuente del código espagueti
 Difícil de depurar por otros programadores en caso de necesidad o error

programación orientada a objetos:

¿En qué consiste?

Trasladar la naturaleza de los objetos de la vida real al código de programación.

¿Cuál es la naturaleza de la vida real?

Los objetos tienen un estado, un comportamiento, que pueden hacer y sus propiedades.

Pongamos por ejemplo el coche:


Algunos ejemplos de lenguajes:

C++, Java, [Link] etc.

Las clases al parecer son “módulos” de un programa


Vocabulario de la POO

 Clase
 Objeto
 Ejemplar de clase, instancia de clase, ejemplarizar una clase, instanciar una clase.
 Modulación
 Encapsulamiento/encapsulación.
 Herencia
 Polimorfismo

Clase:

Modelo donde se redactas las características comunes de un grupo de objetos.

Objetos:

Derivan de la clase.

Estos tienen propiedades (atributos):

Color, Peso, Alto, Largo.

Tiene comportamiento (¿qué puede hacer?) (son métodos y/o funciones):

Arranca, frena, gira, acelera.

LOS OBJETOS TIENEN NOMENCLATURA DE PUNTO.


Cap: #28

Creación de clases y objetos/instancias

Al definir una variable dentro de la clase, así se define una propiedad


Cap. #29 poo III

Encapsulación y convenciones a la hora de programar

Encapsulación

POO

Ámbito es desde donde a donde es accesible

No es buena práctica poner public a las constantes o variables de las áreas

La práctica correcta sería un método de acceso y ahí poder modificar, pero no desde la constante o
variable.

Al poner private se hace inaccesible desde otra clase

Convenciones:
Cap. #30

Constructores

¿Qué son?

Son especificaciones primarias de la clase (estado inicial)

Así se le llama a la clase, primero el nombre del a clase a llamar, después el nombre del objeto a
crear = new coche

Get o getter es dar información

Si ocupas crear coches con diferentes constructores, se hace una sobrecarga de constructores
Cap. #31 getters y setters

Uso de getters y setters

Uso de this

Dividir (Split) las clases largas

Recuerda que el método void no devuelve nada

En Setter se implementa información

En get se pide información,

Después de un setter usualmente va un getter


public void setExtras(bool paramClimatizador, string paramTapiceria)
{
climatizador= paramClimatizador;
tapiceria= paramTapiceria;
}
public string getExtras()
{

return "Extras del coche: \n" + "Tapicería: " + tapiceria + "Climatizador: " + climatizador;

Y para modificar en cw primero es el seter y luego el getter

Coche coche3= new Coche(4500.25,1200.35);


[Link]([Link]());
[Link](true, "cuero ");
[Link]([Link]());

Si el parámetro se llama igual que la clase hay un problema de amiguedad.

Si hay ambigüedad se le puede agregar “this”

Si la clase es muy grande, puedes dividirla en pedazos poniendo al principio partial.”nombre dela clase”
Cap. #32 visual studio y POO

Modularización; dividir aplicación en varios ficheros fuente

Uso de constructor por defecto vs constructor propio

Comentarios tipo TODO

Algunas utilidades en Visual Studio

Al poner //Todo, en la lista de tareas que está en el menú “Ver” podemos continuar donde
dejamos la actividad

Al modular un proyecto quiere decir que las clases pueden estar en ficheros diferentes y funcionar
como una única aplicación
Cap. #33 llamadas y clase math

Llamadas a métodos

Clase math
Cap. #34 Métodos y variables static

Int contador=7;

Un objeto no puede variar en una clase estática

Pero la clase si puede cambiar el valor de la variable

Se puede utilizar el nombre de la clase y su método en lugar de crear un objeto.


Cap. #35

Clases anónimas

Importar métodos static

Clases anónimas
var miVariable = new {Nombre = "Juan", Edad = 19};

[Link]([Link] + " " + [Link]);

var miOtraVariable = new { Nombre = "Ana", Edad = 25};

miVariable = miOtraVariable;
Cap. #36 Arrays

¿Qué son los arrays?

Estructura de datos que contiene una colección de valores del mismo tipo.

¿para qué sirven?

Para almacenar valores que normalmente tienen alguna relación entre sí.

Además tienes la info mas ordenada

¿Cómo se declaran? (sintaxis)

Int [] mi_matriz;

Los corchetes indican que es un array

Iniciación:

mi_matriz=new int [4];

Esa es la forma dinámica pero si ocupo que sea fijo sería


Dentro del main
// int[] edades;

// edades = new int[4];

// edades[0] = 15;
// edades[1] = 27;
// edades[2] = 19;
// edades[3] = 80;
int[] edades = { 15, 27, 19, 80 };

[Link](edades[2]);
Cap. #37 Arrays 2

Arrays implícitos

Arrays de objetos

Arrays de tipo anónimos

Recorrido y acceso de arrays con bucle for

Dentro del array tiene que haber concordancia en el tipo por ejemplo:
var personas = new[]
{
new {Nombre="Juan", Edad=19},

new {Nombre="María", Edad=49},

new {Nombre="Diana", Edad=35}


};
Cap. #38 arrays 3

Recorrido y acceso de arrays con bucle for

Bucle for

for(int i=0; i<=8; i++){

// código interior del bucle for

Aquí se va a repetir mientras la variable i sea menor o igual que 8

Básicamente el for es un índice para el array


//array implicito

//var datos = new[] { "Juan", "Díaz", "España" };

var valores = new[] { 15, 28, 35, 75.5}; //todo a double

//arrays de objetos

Empleados Ana = new Empleados("Ana", 27);

Empleados[] arraysEmpleados = new Empleados[2];

arraysEmpleados[0] = new Empleados("Sara", 37);

arraysEmpleados[1] = Ana;

//array de tipo o clase anonima

var personas = new[]


{
new {Nombre="Juan", Edad=19},

new {Nombre="María", Edad=49},

new {Nombre="Diana", Edad=35}

};

for(int i=0; i < 5; i++)


{
[Link](valores[i]);

class Empleados
{
public Empleados (string nombre, int edad)
{
[Link]=nombre;
[Link]=edad;

string nombre;
int edad;

bucle for it
Cap. 39

For it

Agregar el length al array hace que pueda buscar en toda la longitud del array sin tener que
especificar cuantos son.
Cap. #40

Arrays como parámetros de métodos

Arrays como devolución de métodos (return)


private static void Main(string[] args)
{

int[] arrayElementos = LeerDatos();

[Link]("imprimiento desde el main");


foreach (int i in arrayElementos) [Link](i);

static int[] LeerDatos()


{
[Link]("¿Cuántos elementos quieres que tenga el array?");

string respuesta=[Link]();

int numElementos=[Link](respuesta);

int[]datos = new int[numElementos];

for(int i=0;i<numElementos; i++)


{
[Link]($"introduce el dato para la posición {i}");

respuesta= [Link]();

int datosElemento=[Link](respuesta);

datos[i] = datosElemento;

return datos;

}
Cap. #41 Herencias

¿Qué es una herencia?

La ventaja es la reutilización

Principio de diseño de herencia “es-un”


Cuales son las características comunes:

Nombre

Edad

Fecha de alta

Salario

Comportamientos comunes

Van a trabajar

Genera informes
Cap. #42 Herencia y su sintaxis

Sintaxis de la herencia

Superclases y subclases

Clase object
Cap. #43 constructores

Constructores de superclases y subclases

Instrucción base()

Superclase es que esta arriba de

Subclase están abajo en la jerarquía de herencia.

Al poner un constructor en la herencia base, las demás pierden sus propiedades hasta que se les
agrege el :base en un constructor
class Caballo : Mamiferos
{
public Caballo (string nombrecaballo) : base(nombrecaballo)
{

}
Cap. #44 herencia IV principio de sustitución

principio de sustitución en la herencia


Cap. #45 herencia V polimorfismo.

Herencia de métodos: palabras reservadas “new, virtual y override”

Si en las subherencias hay un método propiedad con el mismo nombre que la herencia base, se
sobreescribe y se muestra la indicada en la subherencia, si se hace apropósito lo correcto será usar
un “new” para indicarlo

No cambia el funcionamiento, solo quita la advertencia y se indica que es apropósito.

Al poner la palabra “virtual” en una propiedad de la clase que hereda, puede heredar esa
propiedad con la facilidad de modificarlo sin que pase a ser otra propiedad aparte siempre y
cuando en la sublcase se instancíe la propiedad con el mismo nombre y agregando “override” para
indicar que es parte del mismo pero con diferente valor.

Herencia base:

Sub clase

El polimorfismo es cuando el objeto en programación se puede comportar de diferente forma o


tener diferente forma dependiendo del contexto
Cap. #46 modificadores de acceso protected

Public vs private vs protected

El ejercicio sería:

-Crear 3 clases

Avión

Vehículo

Coche

-método común a las tres clases

Arrancar motor

Parar motor

-método virtual

conducir

private static void Main(string[] args)


{
Coche dart = new Coche();

Avion Boing = new Avion();

Vehículo[] almacenVeiculos= new Vehículo[2];


almacenVeiculos[0] = dart;
almacenVeiculos[1] = Boing;

for (int i = 0; i <2; i++)


{
almacenVeiculos[i].Conducir();

class Vehículo
{
public void Encender()
{
[Link]("Puedo encenderme con la llave");

public void Apagar()


{

[Link]("Puedo apagarme con la llave");


}

public virtual void Conducir()


{
[Link]("Se conduce");
}

class Avion : Vehículo


{
public override void Conducir()
{
[Link]("Se conduce sobre el aire");
}
}

class Coche: Vehículo


{
public override void Conducir()
{
[Link]("se conduce en tierra");
}

}
Cap. #48 YEAH!!

Interfaces 1

¿Qué son?

Conjunto de directrices que deben cumplir las clases.

Sintaxis.

Al crear una interfaz se especifica al principio

“interface “ después el nombre de ella, pero siempre comenzando con un I mayúscula


interface IMamiferosTerrestres
{
int NumeroPatas();
}

Para aplicarlo a una clase sería por ejemplo

Class caballo: IMamiferosTerrestres

Pero si ya se tiene herencia sería

Class caballo: Mamíferos, IMamiferosTerrestres

Y para llamarlo ponemos otra propiedad


public int NumeroPatas()
{
return 4;
}

Reglas:
Cap. #49

¿qué son las interfaces?

Clases que heredan varias interfaces

Interfaces con varios métodos

Interfaces con métodos iguales

 se puede heredar varias interfaces pero no varias clases

para poner varias interfaces se separan con coma

si hay una ambigüedad entre dos interfaces que tengan el mismo método, se especifica
int [Link]()

se le quita el public y también hay que especificar a que interfas nos referimos

Caballo Babieca = new Caballo("BabiecA");


ISaltoConPatas ImiBabieca = Babieca;

 En una interfaz no se pueden definir campos o variables, solo métodos


 No se pueden definir constructores
 No se pueden definir destructores.
 No se pueden especificar modificadores de acceso en métodos (todos son public de forma
implícita)
 No se pueden anidar clases ni otro tipo de estructuras en las interfaces
Cap. #51

Ejemplo sencillo uso de interfaz


Cap. #52

Clases abstractas

nos sirve en lugar de las interfaces, ahorrar trabajo al momento de que la herencia pueda
variar entre clases
cap. #53

¿qué son las “sealed classes” y cual es su utilidad=> que son los métodos sealed

Sealed es cuando no puede ya heredar o modificar en la herencia la propiedad


Cap. #55

properties

nos permite acceder como si fuera public

LAS PROPIEDADES VAN CON MAYUS


Cap. #56

Property es mas rapido

Propeti properti
Cap. #57

Structs

Clases vs structs. Similitudes y diferencias

Cuando utilizar las structs

Las clases se almacenan en heap y las structs en stack

Dentro de un ordenador hay dos tipos de memoria

La stack y la heap

En la stack van las variables.

Las clases por ejemplo

Class empleado… empleado empleado1 = new empleado();

Se guarda en la memoria heap.

Se crea una referenciaen stack para vincular al objeto que se creó en el heap.

Para crear una estructura en vez de class se usa struct.

Y se almacena en el stack

El stack es mas rápido.


Cap. #58
Enum
Sintaxis y utilidad.
Son un conjunto de constantes con nombre
La sintaxis es:
Enum NombreDeEnumeración {nombre1, nombre2, nombre3…};
Sirve para representar valores fijos (constantes) en un programa.
Se usan en el name space (afuera de cualquier clase.)
(el .to string se utiliza al final con el punto para convertir otro formato en string.)
Para valores null o nulos, la sintaxis es Origenobjeto? Nombre=null

Esto da como resultado “bueno” en lugar de 1500, si quiero que salga el valor del enum se hace un
“casting”. Sería
Cap. #59

Destructores y su sintaxis

Garbage collection (recolección basura)

Alt + 126 “~”

En mi caso altGR + “+” funciona.


En la clase manejoArchivos se hace una conexión con un archivo lo que consume memoria
Con el ~ se elimina al dejar de usarlo
A tener en cuenta lo siguiente:
Cap. #50

Programación genérica

Ejemplocase <string> arthviso = new EjemploClase <string>();

Puedes reciclarla para cualquier objeto.

Paraque usarlo?
Cap. #61

Programación genérica.

Creación de clase genérica.

Utilización de genéricos.

Se crea especificando entre parénteisis angulares <T>

En el array [] estamos indicando que se puede almacenar cualquier tipo de objeto


Cap. #62

Genéricos 3

Problemática y solución

Una clase genérica con restricción se puede especificar de la siguiente manera:


class AlmacenEmpleados <T>where T: IParaEmpleados
{

En donde el <t> sirve para especificar que es genérica y el where (donde) T implemente la interfaz
“IParaEmpleados”

También podría gustarte