En programación orientada a objetos, el constructor es la función que inicializa los valores de un objeto al momento de crearlo. Si trabajas con C# y quieres escribir código más limpio, entender este concepto te ayuda a evitar errores por valores nulos y a reducir líneas innecesarias cada vez que instancias una clase.
¿Qué es un constructor en programación orientada a objetos?
Un constructor es una función especial que se ejecuta automáticamente cuando creas un nuevo objeto a partir de una clase. Su propósito es asignar valores por defecto o ejecutar rutinas iniciales que ese objeto necesita desde el primer momento de su existencia.
¿Para qué sirve un constructor? Sirve para inicializar las propiedades de un objeto en el momento exacto en que se crea, evitando que tengas que asignar manualmente cada valor después de instanciar la clase.
La lógica es simple: en lugar de crear un objeto vacío y luego ir llenando cada propiedad línea por línea, defines una vez los valores iniciales y cada nuevo objeto los hereda automáticamente.
¿Cómo se crea un constructor en C#?
En C# la sintaxis tiene reglas muy específicas que debes respetar para que el compilador reconozca la función como constructor.
Debe llevar el modificador de acceso public para que pueda invocarse al crear el objeto.
No retorna ningún valor, ni siquiera void. Simplemente no se especifica tipo.
El nombre de la función debe ser exactamente igual al nombre de la clase.
Una vez cumples esas tres reglas, abres llaves y dentro escribes la lógica de inicialización que quieras. Aplicado a una clase Superhero, el constructor se ve así:
csharp
public class Superhero
{
public int Id;
public bool PuedeVolar;
public List<Superpoder> Superpoderes;
Fíjate en un detalle importante: la propiedad Superpoderes es una List, es decir, una colección de datos. Si no la inicializas, queda en null y cualquier intento de agregar elementos te va a lanzar un error en ejecución. Por eso conviene inicializarla con una lista vacía dentro del constructor.
¿Y si la clase tiene varias propiedades?
El mismo patrón aplica a cualquier clase. Por ejemplo, en una clase Superpoder puedes definir un nivel inicial por defecto:
csharp
public class Superpoder
{
public int Nivel;
publicSuperpoder(){Nivel=1;}
}
Cada vez que ejecutes new Superpoder(), el objeto nacerá con Nivel = 1. Y aquí viene lo interesante: ese valor lo puedes cambiar después sin problema, el constructor solo define el punto de partida.
¿Cuándo conviene usar el constructor y cuándo asignar valores directamente?
C# permite inicializar propiedades sin pasar por un constructor. Puedes asignar el valor por defecto directamente en la declaración de la propiedad.
csharp
public int Id = 1;
public List<Superpoder> Superpoderes = new List<Superpoder>();
El resultado funcional es parecido: cada objeto se crea con esos valores. La diferencia está en el estándar.
¿Cuál es la diferencia entre usar constructor y asignar valores en la propiedad? El constructor es el patrón estándar de la programación orientada a objetos y permite ejecutar lógica adicional al crear el objeto. Asignar valores directamente en la propiedad es una alternativa más corta, pero no sigue el estándar OOP.
Si solo necesitas valores fijos, asignar en la propiedad funciona. Si necesitas ejecutar rutinas, validaciones o lógica condicional al momento de crear el objeto, el constructor es el camino correcto.
¿Qué pasa cuando se ejecuta new en C#?
La palabra clave new es la que dispara todo el proceso. Cuando escribes new Superhero(), C# reserva memoria para el nuevo objeto y, justo antes de entregártelo, ejecuta el código que pusiste dentro del constructor.
Por eso cada objeto que crees a partir de esa clase nace ya con sus propiedades pobladas. No tienes que recordar inicializarlas una por una desde fuera, la clase se encarga de sí misma.
Este comportamiento es lo que hace que el constructor sea tan útil para minimizar código repetitivo y para garantizar que ningún objeto se cree en un estado inválido.
¿Cómo aplicarías un constructor en una clase tuya? Cuéntame en los comentarios qué propiedades inicializarías por defecto y por qué.
Un constructor es una función que va dentro de una clase y que lleva exactamente el mismo nombre de la clase. Esta función no debe retornar nada.
El constructor se ejecuta automaticamente cuando se instancia la clase.
En este constructor podemos establecer valores por defecto en nuestras propiedades y, por lo tanto, nos ayuda a minimizar el código ya que no tenemos que inicializar los valores de manera manual cada vez que creemos una instancia nueva.
¡Exacto! Lo bueno de los constructores es que también podemos hacer sobrecarga de ellos, para ejercer distintas formas de inicialización de objetos.
En C#, el nombre del constructor es el mismo que el nombre de la clase.
es muy parecido a Java
Existen constructores con parametros tambien, es decir podemos pasar valores específicos para inicializar las propiedades del objeto cuando se crea.
Ejemplo:
public SuperHero(int id, string nombre, int edad, string identidadSecreta, string ciudad, string fechaNacimiento, bool puedeVolar) {
Id = id;
Nombre = nombre;
Edad = edad;
EstaEnfermo = false; // Valor predeterminado
IdentidadSecreta = identidadSecreta;
Ciudad = ciudad;
FechaNacimiento = fechaNacimiento;
SuperPoderes = new List<SuperPoder>(); // Inicializado vacío
PuedeVolar = puedeVolar;
}
Asi es como entonces podemos usar estos constructores con parametros:
Creación de Instancias con Constructores Personalizados:
// Usando constructor con parámetros para crear una instancia
SuperHero Batman = new SuperHero(2, "Batman", 35, "Bruce Wayne", "Gotham City", "19/02/1988", false);
Cuales son las ventajas y diferencias entre usar el constructor o simplemente asignándole un valor directamente.
El constructor forza el pasar los parámetros. Es bastante util para pedir parámetros que son necesarios para ejecución aparte te ahorra varias lineas de código que deberías poner para asignar cada valor uno a uno.
este video si se escucha bien :)
Esta sería otra manera de definir el contruct y que esta infiera su valor:
//CLASES Y OBEJTOS PARA SUPER HEROES
SuperHeroes Batman = new SuperHeroes();
Batman.id = 1;
Batman.Nombre = "Bruce Wayne";
Batman.IdentidadSecreta = "Bruce Wayne";
Batman.Ciudad = "Gotham City";
Batman.PuedeVolar = false;
Batman.Esinmoltal = false;
Batman.Edad = 34;
Batman.Escasado = false;
SuperPoder Agilidad = new SuperPoder();
Agilidad.id = 1;
Agilidad.Nombre = "Agilidad";
Agilidad.Descripcion = "Poder Moverse Rapido";
Agilidad.Nivel = NivelesUtilidad.Nivel7;
List<SuperPoder> PoderesBatman = new List<SuperPoder>();
PoderesBatman.Add(Agilidad);
class SuperHeroes
{
public int id;
public string Nombre;
public string IdentidadSecreta;
public string Ciudad;
public bool PuedeVolar;
public bool Esinmoltal;
public int Edad;
public bool Escasado;
public List<SuperHeroes> SuperPoderes; //UNA LISTA CON EL TIPO QUE PODEMSO AGREGAR SUPER PODERES
//CONTRUTOR PARA INICIAR UNA VALORES EN LA CLASE NO RETORNA NADA
public SuperHeroes()
{
id = 1;
SuperPoderes = new List<SuperHeroes>();
Escasado = false;
}
}
class SuperPoder
{
public int id;
public string Nombre;
public string Habilidad;
public string Descripcion;
public NivelesUtilidad Nivel;
public SuperPoder()
{
Nivel = NivelesUtilidad.Nivel1;
}
//CONTRUTORO PARA PODER INICILIZA R Y PODER HACER COSAS
}
//ESTO ES PARA CREAR UN TIPO DE DATO ESPESIFICO PARA QUE SE USE EN LA CLASE
Instanciar un objeto en C# se refiere al proceso de crear una instancia específica de una clase, es decir, un objeto concreto basado en la estructura y comportamiento definidos por esa clase. La sintaxis para instanciar un objeto implica el uso del operador new, seguido del nombre de la clase y un par de paréntesis. Los paréntesis pueden incluir argumentos para pasar al constructor de la clase, si es que la clase define uno o más constructores que requieren parámetros. Aquí te muestro la estructura básica y algunos ejemplos:
++TipoDeClase:++ El nombre de la clase de la cual quieres crear un objeto.
++nombreDelObjeto:++ El nombre de la variable que usas para referenciar al objeto.
argumentos: Los valores pasados al constructor de la clase. Estos son opcionales y dependen de cómo esté definido el constructor en la clase.
Ejemplos
++Sin Argumentos++
Si la clase no define un constructor explícito, o tiene un constructor que no requiere parámetros, puedes instanciar un objeto sin pasar argumentos:
<code>publicclassPersona{public string nombre;public int edad;}// Instanciar un objeto de la clase PersonaPersona persona1 =newPersona();
++Con Argumentos++
Si la clase tiene un constructor que acepta parámetros, debes pasar argumentos correspondientes al instanciar un objeto:
<code>publicclassPersona{public string nombre;public int edad;// Constructor que acepta dos argumentospublicPersona(string nombreInicial, int edadInicial){ nombre = nombreInicial; edad = edadInicial;}}// Instanciar un objeto de la clase Persona con argumentosPersona persona2 =newPersona("Ana",30);
Detalles Importantes
++Constructores:++ Son métodos especiales que se llaman en el momento de la instanciación del objeto. Sirven para inicializar el objeto, estableciendo valores iniciales para sus campos o realizando cualquier configuración necesaria.
++Sobrecarga de Constructores:++ Una clase puede tener múltiples constructores, cada uno con diferentes listas de parámetros. Esto permite instanciar objetos de la clase en diferentes estados iniciales, según lo requiera el programa.
La instanciación de objetos es fundamental en la programación orientada a objetos, ya que es el mecanismo mediante el cual se crean las instancias que contienen los datos y comportamientos definidos en las clases.
// See https://aka.ms/new-console-template for more informationConsole.WriteLine("Actors");var theDarkKnight =newFilm();theDarkKnight.NameFilm="The Dark Knight";theDarkKnight.YearFilm=2008;theDarkKnight.Stars=NumStars.Star4;var tearsOfTheSun =newFilm();tearsOfTheSun.NameFilm="Tears of the Sun";tearsOfTheSun.YearFilm=2003;tearsOfTheSun.Stars=NumStars.Star3;var multiple =newFilm();multiple.NameFilm="Multiple";multiple.YearFilm=2016;multiple.Stars=NumStars.Star3;var americanPsycho =newFilm();americanPsycho.NameFilm="American Psycho";americanPsycho.YearFilm=2000;americanPsycho.Stars=NumStars.Star3;var person1 =newActor();var person2 =newActor();person1.Id=1;person1.Name="Christian Bale";person1.Oscar=true;List<Film> filmsPerson1 =newList<Film>();filmsPerson1.Add(theDarkKnight);filmsPerson1.Add(americanPsycho);person1.Films= filmsPerson1;person2.Id=2;person2.Name="Bruce Willis";person2.Oscar=false;List<Film> filmsPerson2 =newList<Film>();filmsPerson2.Add(tearsOfTheSun);filmsPerson2.Add(multiple);person2.Films= filmsPerson2;classActor{public int Id;public string Name;public bool Oscar;publicList<Film>Films;publicActor(){Id=1;Name="Name Actor";Films=newList<Film>();Oscar=false;}}classFilm{public string NameFilm;public int YearFilm;publicNumStarsStars;publicFilm(){NameFilm="Name";YearFilm=9999;Stars=NumStars.Star0;}}enumNumStars{Star0,Star1,Star2,Star3,Star4,Star5}```// See for more informationConsole.WriteLine("Actors");var theDarkKnight =newFilm();theDarkKnight.NameFilm="The Dark Knight";theDarkKnight.YearFilm=2008;theDarkKnight.Stars=NumStars.Star4;var tearsOfTheSun =newFilm();tearsOfTheSun.NameFilm="Tears of the Sun";tearsOfTheSun.YearFilm=2003;tearsOfTheSun.Stars=NumStars.Star3;var multiple =newFilm();multiple.NameFilm="Multiple";multiple.YearFilm=2016;multiple.Stars=NumStars.Star3;var americanPsycho =newFilm();americanPsycho.NameFilm="American Psycho";americanPsycho.YearFilm=2000;americanPsycho.Stars=NumStars.Star3;var person1 =newActor();var person2 =newActor();person1.Id=1;person1.Name="Christian Bale";person1.Oscar=true;List\<Film> filmsPerson1 =newList\<Film>();filmsPerson1.Add(theDarkKnight);filmsPerson1.Add(americanPsycho);person1.Films= filmsPerson1;person2.Id=2;person2.Name="Bruce Willis";person2.Oscar=false;List\<Film> filmsPerson2 =newList\<Film>();filmsPerson2.Add(tearsOfTheSun);filmsPerson2.Add(multiple);person2.Films= filmsPerson2;classActor{public int Id;public string Name;public bool Oscar;publicList\<Film>Films; publicActor(){Id=1;Name="Name Actor";Films=newList\<Film>();Oscar=false;}}classFilm{public string NameFilm;public int YearFilm;publicNumStarsStars; publicFilm(){NameFilm="Name";YearFilm=9999;Stars=NumStars.Star0;}}enumNumStars{Star0,Star1,Star2,Star3,Star4,Star5}
Comparto hasta aqui mi código ```c#
// Programa principal de ejemplo para crear y utilizar objetos en C#
// Se utiliza el paradigma de Programación Orientada a Objetos (POO)
Console.WriteLine("Hello, World!");
// Se crea una lista de objetos de tipo Despertardelafruta
var poderVolar = new Despertardelafruta(); // Se crea un nuevo objeto de la clase Despertardelafruta
poderVolar.Nombre = "Gomu Gomu no mi"; // Se asigna un nombre a la fruta del diablo
poderVolar.Descripcion = "Permire al usuario estirar su cuerpo como si fuera goma"; // Se asigna una descripción a la fruta del diablo
poderVolar.Nivel = NivelDePoder.Alto; // Se asigna un nivel de poder a la fruta del diablo
poderVolar.Haki = TipodeHacki.ConquerorHaki; // Se asigna un tipo de Haki a la fruta del diablo
poderVolar.Habilidades = "Elasticidad, resistencia, fuerza aumentada"; // Se asignan habilidades a la fruta del diablo
poderVolar.PuedeVolar = false; // Se indica que la fruta del diablo no permite volar
// Se crea otro objeto de la clase Despertardelafruta representando un Haki
var haki = new Despertardelafruta(); // Se crea otro objeto de la clase Despertardelafruta
haki.Nombre = "Haki del Conquistador"; // Se asigna un nombre al Haki
haki.Descripcion = "Permite al usuario dominar la voluntad de otros"; // Se asigna una descripción al Haki
haki.Nivel = NivelDePoder.Legendario; // Se asigna un nivel de poder al Haki
haki.Haki = TipodeHacki.ConquerorHaki; // Se asigna el tipo de Haki al objeto
haki.Habilidades = "Dominación mental, intimidación"; // Se asignan habilidades al Haki
haki.PuedeVolar = true; // Se indica que el Haki permite volar
// Se crea un objeto de la clase AnimeProtagonista representando a Luffy
var mugiwara = new AnimeProtagonista();
mugiwara.Id = 1;
mugiwara.Name = "monkey D. Luffy";
mugiwara.FrutadelDiablo = "Gomu gomu no mi";
mugiwara.NombredelaTripulacion = "Sombrero de Paja Mugiwara no Luffy";
List<Despertardelafruta> gomuGomu = new List<Despertardelafruta>(); // Se crea una lista para almacenar los Despertardelafruta de Luffy
gomuGomu.Add(new Despertardelafruta // Se agrega el primer Despertar de la fruta de Luffy
{
Nombre = "Gomu Gomu no Mi",
Descripcion = "Permite al usuario estirar su cuerpo como si fuera goma",
Nivel = NivelDePoder.Alto,
Haki = TipodeHacki.ConquerorHaki,
Habilidades = "Elasticidad, resistencia, fuerza aumentada",
PuedeVolar = false
});
mugiwara.Despertardelafrutas = gomuGomu; // Asignación de la lista de Despertardelafruta al protagonista Luffy
// Se crea un objeto de la clase AnimeProtagonista representando a Law
var corazon = new AnimeProtagonista();
corazon.Id = 2;
corazon.Name = "Trafalgar D. Law";
corazon.FrutadelDiablo = "Ope ope no mi";
corazon.NombredelaTripulacion = "Piratas Corazon";
List<Despertardelafruta> opeOpe = new List<Despertardelafruta>(); // Se crea una lista para almacenar los Despertardelafruta de Law
opeOpe.Add(new Despertardelafruta // Se agrega el primer Despertar de la fruta de Law
{
Nombre = "Ope Ope no Mi",
Descripcion = "Permite al usuario crear un espacio donde puede manipular todo lo que hay dentro",
Nivel = NivelDePoder.Alto,
Haki = TipodeHacki.ConquerorHaki,
Habilidades = "Cirugía, teletransportación, manipulación de objetos",
PuedeVolar = false
});
corazon.Despertardelafrutas = opeOpe; // Asignación de la lista de Despertardelafruta al protagonista Law
// Se crea un objeto de la clase AnimeProtagonista representando a Barbanegra
var barbanegra = new AnimeProtagonista();
barbanegra.Id = 3;
barbanegra.Name = "Marshall D. Teach";
barbanegra.FrutadelDiablo = "Yami Yami no Mi y la Gura Gura no Mi";
barbanegra.NombredelaTripulacion = "Piratas de Barbanegra";
barbanegra.PuedeVolar = true;
List<Despertardelafruta> barbanegraTeach = new List<Despertardelafruta>(); // Se crea una lista para almacenar los Despertardelafruta de Barbanegra
barbanegraTeach.Add(new Despertardelafruta // Se agrega el primer Despertar de la fruta de Barbanegra
{
Nombre = "Yami Yami no Mi",
Descripcion = "Permite al usuario manipular la oscuridad y absorber todo tipo de ataques",
Nivel = NivelDePoder.Alto,
Haki = TipodeHacki.ConquerorHaki,
Habilidades = "Absorción de ataques, manipulación de gravedad",
PuedeVolar = false
});
barbanegra.Despertardelafrutas = barbanegraTeach; // Asignación de la lista de Despertardelafruta al protagonista Barbanegra
// Definición de la clase AnimeProtagonista
// Esta clase representa a un protagonista de anime con varias propiedades
class AnimeProtagonista
{
public int Id; // Identificador único del protagonista
public string Name; // Nombre del protagonista
public string FrutadelDiablo; // Nombre de la fruta del diablo que posee
public string NombredelaTripulacion; // Nombre de la tripulación a la que pertenece
public List<Despertardelafruta> Despertardelafrutas; // Habilidades o poderes despertados de la fruta
public bool PuedeVolar; // Indica si el protagonista puede volar
public AnimeProtagonista() // Constructor de la clase AnimeProtagonista
{
Id = 0; // Inicializa el Id como 0
Despertardelafrutas = new List<Despertardelafruta>(); // Inicializa la lista de Despertardelafruta
PuedeVolar = false; // Inicializa la propiedad PuedeVolar como falsa
}
}
// Definición de la clase Despertardelafruta
// Esta clase representa un despertar de la fruta del diablo
class Despertardelafruta
{
public string Nombre; // Nombre del despertar de la fruta
public string Descripcion; // Descripción del despertar de la fruta
public NivelDePoder Nivel; // Nivel de poder del despertar
public TipodeHacki Haki; // Tipos de Haki asociados al despertar
public string Habilidades; // Habilidades asociadas al despertar de la fruta
public bool PuedeVolar; // Indica si el despertar permite volar
public Despertardelafruta() // Constructor de la clase Despertardelafruta
{
Nombre = string.Empty; // Inicializa el nombre como vacío
Descripcion = string.Empty; // Inicializa la descripción como vacía
Nivel = NivelDePoder.Bajo; // Inicializa el nivel de poder como Bajo
Haki = TipodeHacki.ArmamentHaki; // Inicializa el tipo de Haki como Armament Haki
Habilidades = string.Empty; // Inicializa las habilidades como vacías
PuedeVolar = false; // Inicializa la propiedad PuedeVolar como falsa
}
}
// Enumeración que define los niveles de poder de un protagonista
// Cada nivel tiene un nombre descriptivo
enum NivelDePoder
{
Bajo, // Nivel de poder bajo
Medio, // Nivel de poder medio
Alto, // Nivel de poder alto
Legendario // Nivel de poder legendario
}
// Enumeración que define los tipos de Haki disponibles en el universo de One Piece
// Cada tipo de Haki tiene un nombre descriptivo
enum TipodeHacki
{
ArmamentHaki, // Haki de armamento
ObservationHaki, // Haki de observación
ConquerorHaki // Haki del conquistador
}
// Se utiliza el paradigma de Programación Orientada a Objetos (POO)Console.WriteLine("Hello, World!");// Se crea una lista de objetos de tipo Despertardelafrutavar poderVolar =newDespertardelafruta();// Se crea un nuevo objeto de la clase DespertardelafrutapoderVolar.Nombre="Gomu Gomu no mi";// Se asigna un nombre a la fruta del diablopoderVolar.Descripcion="Permire al usuario estirar su cuerpo como si fuera goma";// Se asigna una descripción a la fruta del diablopoderVolar.Nivel=NivelDePoder.Alto;// Se asigna un nivel de poder a la fruta del diablopoderVolar.Haki=TipodeHacki.ConquerorHaki;// Se asigna un tipo de Haki a la fruta del diablopoderVolar.Habilidades="Elasticidad, resistencia, fuerza aumentada";// Se asignan habilidades a la fruta del diablopoderVolar.PuedeVolar=false;// Se indica que la fruta del diablo no permite volar// Se crea otro objeto de la clase Despertardelafruta representando un Hakivar haki =newDespertardelafruta();// Se crea otro objeto de la clase Despertardelafrutahaki.Nombre="Haki del Conquistador";// Se asigna un nombre al Hakihaki.Descripcion="Permite al usuario dominar la voluntad de otros";// Se asigna una descripción al Hakihaki.Nivel=NivelDePoder.Legendario;// Se asigna un nivel de poder al Hakihaki.Haki=TipodeHacki.ConquerorHaki;// Se asigna el tipo de Haki al objetohaki.Habilidades="Dominación mental, intimidación";// Se asignan habilidades al Hakihaki.PuedeVolar=true;// Se indica que el Haki permite volar// Se crea un objeto de la clase AnimeProtagonista representando a Luffyvar mugiwara =newAnimeProtagonista();mugiwara.Id=1;mugiwara.Name="monkey D. Luffy";mugiwara.FrutadelDiablo="Gomu gomu no mi";mugiwara.NombredelaTripulacion="Sombrero de Paja Mugiwara no Luffy";List\<Despertardelafruta> gomuGomu =newList\<Despertardelafruta>();// Se crea una lista para almacenar los Despertardelafruta de LuffygomuGomu.Add(newDespertardelafruta// Se agrega el primer Despertar de la fruta de Luffy{ Nombre="Gomu Gomu no Mi", Descripcion="Permite al usuario estirar su cuerpo como si fuera goma", Nivel=NivelDePoder.Alto, Haki=TipodeHacki.ConquerorHaki, Habilidades="Elasticidad, resistencia, fuerza aumentada", PuedeVolar=false});mugiwara.Despertardelafrutas= gomuGomu;// Asignación de la lista de Despertardelafruta al protagonista Luffy// Se crea un objeto de la clase AnimeProtagonista representando a Lawvar corazon =newAnimeProtagonista();corazon.Id=2;corazon.Name="Trafalgar D. Law";corazon.FrutadelDiablo="Ope ope no mi";corazon.NombredelaTripulacion="Piratas Corazon";List\<Despertardelafruta> opeOpe =newList\<Despertardelafruta>();// Se crea una lista para almacenar los Despertardelafruta de LawopeOpe.Add(newDespertardelafruta// Se agrega el primer Despertar de la fruta de Law{ Nombre="Ope Ope no Mi", Descripcion="Permite al usuario crear un espacio donde puede manipular todo lo que hay dentro", Nivel=NivelDePoder.Alto, Haki=TipodeHacki.ConquerorHaki, Habilidades="Cirugía, teletransportación, manipulación de objetos", PuedeVolar=false});corazon.Despertardelafrutas= opeOpe;// Asignación de la lista de Despertardelafruta al protagonista Law// Se crea un objeto de la clase AnimeProtagonista representando a Barbanegravar barbanegra =newAnimeProtagonista();barbanegra.Id=3;barbanegra.Name="Marshall D. Teach";barbanegra.FrutadelDiablo="Yami Yami no Mi y la Gura Gura no Mi";barbanegra.NombredelaTripulacion="Piratas de Barbanegra";barbanegra.PuedeVolar=true;List\<Despertardelafruta> barbanegraTeach =newList\<Despertardelafruta>();// Se crea una lista para almacenar los Despertardelafruta de BarbanegrabarbanegraTeach.Add(newDespertardelafruta// Se agrega el primer Despertar de la fruta de Barbanegra{ Nombre="Yami Yami no Mi", Descripcion="Permite al usuario manipular la oscuridad y absorber todo tipo de ataques", Nivel=NivelDePoder.Alto, Haki=TipodeHacki.ConquerorHaki, Habilidades="Absorción de ataques, manipulación de gravedad", PuedeVolar=false});barbanegra.Despertardelafrutas= barbanegraTeach;// Asignación de la lista de Despertardelafruta al protagonista Barbanegra// Definición de la clase AnimeProtagonista// Esta clase representa a un protagonista de anime con varias propiedadesclassAnimeProtagonista{ public int Id;// Identificador único del protagonista public string Name;// Nombre del protagonista public string FrutadelDiablo;// Nombre de la fruta del diablo que posee public string NombredelaTripulacion;// Nombre de la tripulación a la que pertenece publicList\<Despertardelafruta>Despertardelafrutas;// Habilidades o poderes despertados de la fruta public bool PuedeVolar;// Indica si el protagonista puede volar publicAnimeProtagonista()// Constructor de la clase AnimeProtagonista { Id=0;// Inicializa el Id como 0 Despertardelafrutas=newList\<Despertardelafruta>();// Inicializa la lista de Despertardelafruta PuedeVolar=false;// Inicializa la propiedad PuedeVolar como falsa }}// Definición de la clase Despertardelafruta// Esta clase representa un despertar de la fruta del diabloclassDespertardelafruta{ public string Nombre;// Nombre del despertar de la fruta public string Descripcion;// Descripción del despertar de la fruta publicNivelDePoderNivel;// Nivel de poder del despertar publicTipodeHackiHaki;// Tipos de Haki asociados al despertar public string Habilidades;// Habilidades asociadas al despertar de la fruta public bool PuedeVolar;// Indica si el despertar permite volar publicDespertardelafruta()// Constructor de la clase Despertardelafruta { Nombre= string.Empty;// Inicializa el nombre como vacío Descripcion= string.Empty;// Inicializa la descripción como vacía Nivel=NivelDePoder.Bajo;// Inicializa el nivel de poder como Bajo Haki=TipodeHacki.ArmamentHaki;// Inicializa el tipo de Haki como Armament Haki Habilidades= string.Empty;// Inicializa las habilidades como vacías PuedeVolar=false;// Inicializa la propiedad PuedeVolar como falsa }}// Enumeración que define los niveles de poder de un protagonista// Cada nivel tiene un nombre descriptivoenumNivelDePoder{ Bajo,// Nivel de poder bajo Medio,// Nivel de poder medio Alto,// Nivel de poder alto Legendario// Nivel de poder legendario}// Enumeración que define los tipos de Haki disponibles en el universo de One Piece// Cada tipo de Haki tiene un nombre descriptivoenumTipodeHacki{ ArmamentHaki,// Haki de armamento ObservationHaki,// Haki de observación ConquerorHaki// Haki del conquistador}
Constructor inicia los valores o especifica los datos por defecto de una clase.
Podemos ejecutar rutinas por defecto
Es recomendable inicializar las listas con datos vacíos para evitar error en la ejecución.
También puede hacerse de esta manera, me parece mejor por que usualmente mediante el constructor vamos a darle valores a ese objeto que estamos construyendo
public class MiClase
{
// Propiedades con valores predeterminados
public int Valor1 { get; set; }
public string Valor2 { get; set; }
// Uso
MiClase instancia1 = new MiClase(); // Utiliza los valores predeterminados
MiClase instancia2 = new MiClase(10, "Hola"); // Proporciona valores personalizados
Apuntes del profesor:
Constructor inicia los valores o especifica los datos por defecto de una clase.
publicclassPersona{private string apellido;private string nombre;publicPersona(){ apellido =""; nombre ="";}}
📗📗Mis notas de esta clase:
// Instanciamos objetos autoresAutor jostein =newAutor();jostein.Nombre="Jostein Gaarder";jostein.Nacionalidad="Noruego";Autor gabriel =newAutor();gabriel.Nombre="Gabriel garcia Marquez";gabriel.Nacionalidad="Colombiano";Autor carl =newAutor();carl.Nombre="Carl Sagan";carl.Nacionalidad="Estadounidense";// Instanciamos objetos librosLibro mundoSofia =newLibro();mundoSofia.Nombre="El mundo de Sofia";mundoSofia.CantidadPaginas=567;mundoSofia.Genero=GeneroLibro.Filosofia;mundoSofia.Autor= jostein;// estamos asignando un OBJETO COMPLETO a una propiedadLibro ciensoledad =newLibro();ciensoledad.Nombre="Cien años de soledad";ciensoledad.CantidadPaginas=700;ciensoledad.Genero=GeneroLibro.Realismo;ciensoledad.Autor= gabriel;Libro cosmos =newLibro();cosmos.Nombre="Cosmos";cosmos.CantidadPaginas=100;cosmos.Genero=GeneroLibro.Ciencia;cosmos.Autor= carl;Libro libroVacio =newLibro();Console.WriteLine(libroVacio.Nombre);Console.WriteLine(libroVacio.CantidadPaginas);Console.WriteLine(libroVacio.Genero);Console.WriteLine(libroVacio.Autor.Nacionalidad);// Creamos lista de librosList<Libro> biblioteca =newList<Libro>();// Lista que SOLO puede guardar objetos tipo Libro.biblioteca.Add(mundoSofia);biblioteca.Add(ciensoledad);biblioteca.Add(cosmos);enumGeneroLibro{Filosofia,Ciencia,Historia,Realismo,Programacion,GeneroDesconocido}classAutor{public string Nombre;public string Nacionalidad;publicAutor()// Agregamos constructor al autor{Nombre="Autor desconocido";Nacionalidad="Nacionalidad desconocida";}}classLibro{public string Nombre;public int CantidadPaginas;publicGeneroLibroGenero;publicAutorAutor;// La propiedad Autor guardará un OBJETO tipo AutorpublicLibro(){// El constructor pone valores iniciales pero se pueden cambiar después.Nombre="Titulo desconocido";CantidadPaginas=0;Genero=GeneroLibro.GeneroDesconocido;Autor=newAutor();// Cada libro que se cree tendrá automáticamente un objeto Autor (Con los valores por default de autor)}}
mi constructor de recursos unitarios
y qué sucedería si creo el constructor con el keywork private?
Cuando usas la palabra reservada private, automaticamente ese constructor es visible únicamente para la clase en donde está creado el método.
No podrías instanciar ese constructor en otra clase, por ser privado, cuando se utiliza la Herencia de POO.
// SuperPowers.var strengthPower = new SuperPower
{ Name ="Super strength", Description ="The strength that a superhero with this power can have is not human", Element = ElementTypeEnum.Normal, PowerQuality = PowerQualityEnum.Great
};var speedPower = new SuperPower
{ Name ="Super speed", Description ="With this power, the hero can have a super speed in seconds", Element = ElementTypeEnum.Normal, PowerQuality = PowerQualityEnum.Good
};var windPower = new SuperPower
{ Name ="Weather control", Description ="Hero can control the weather with this power", Element = ElementTypeEnum.Wind, PowerQuality = PowerQualityEnum.Regular
};var electricPower = new SuperPower
{ Name ="Thunder generation", Description ="Hero can control thunders with this power", Element = ElementTypeEnum.Electric, PowerQuality = PowerQualityEnum.Great
};// Heroesvar firstHero = new Hero();var secondHero = new Hero();var thirdHero = new Hero();// Hero #1firstHero.ID =1;firstHero.RealName ="Bob Parr";firstHero.HeroName ="Mr Incredible";firstHero.CanFly = false;firstHero.ColorsCostume =["Red","Black","Yellow"];firstHero.IsHuman = true;List<SuperPower> incrediblePower = new List<SuperPower>();incrediblePower.Add(strengthPower);firstHero.Powers = incrediblePower;// Hero #2secondHero.ID =2;secondHero.RealName ="Barry Allen";secondHero.HeroName ="Flash";secondHero.CanFly = false;secondHero.ColorsCostume =["Red","Yellow"];secondHero.IsHuman = true;List<SuperPower> flashPower = new List<SuperPower>();flashPower.Add(speedPower);secondHero.Powers = flashPower;// Hero #3thirdHero.ID =3;thirdHero.RealName ="Ororo Munroe";thirdHero.HeroName ="Storm";thirdHero.CanFly = true;thirdHero.ColorsCostume =["White","Yellow","Red","Black"];thirdHero.IsHuman = false;List<SuperPower> stormPower = new List<SuperPower>();stormPower.Add(windPower);stormPower.Add(electricPower);thirdHero.Powers = stormPower;
class Hero
{ public int ID { get; set;} public string RealName { get; set;} public string HeroName { get; set;} public bool CanFly { get; set;} public List<string> ColorsCostume { get; set;} public bool IsHuman { get; set;} public List<SuperPower> Powers { get; set;} public Hero(){ ID =0; RealName = string.Empty; HeroName = string.Empty; CanFly = false; ColorsCostume = new List<string>(); IsHuman = false; Powers = new List<SuperPower>();}}
class SuperPower
{ public string Name { get; set;} public string Description { get; set;} public ElementTypeEnum Element { get; set;} public PowerQualityEnum PowerQuality { get; set;} public SuperPower(){ Name = string.Empty; Description = string.Empty; Element = ElementTypeEnum.Normal; PowerQuality = PowerQualityEnum.Regular;}}enumElementTypeEnum{ Normal =10, Electric =20, Wind =30}enumPowerQualityEnum{ Regular =10, Good =20, Great =30}