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”