No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Constructor y datos iniciales en una clase

8/19
Recursos

Aportes 15

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

En C#, el nombre del constructor es el mismo que el nombre de la clase.
![](https://static.platzi.com/media/user_upload/Objeto%20Persona-10c0b1de-6119-4523-aedd-c98258046923.jpg)

este video si se escucha bien 😃

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 Spiderman = new SuperHero(1, "SpiderMan", 16, "Peter Parker", "Nueva York", "10/08/2001", false);` `SuperHero Batman = new SuperHero(2, "Batman", 35, "Bruce Wayne", "Gotham City", "19/02/1988", false);`
![](https://static.platzi.com/media/user_upload/Snap%20%281%29-c8445aa4-361d-489e-ace0-bbcb23a4b196.jpg)
  • 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.

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:

<code> 
TipoDeClase nombreDelObjeto = new TipoDeClase(argumentos);

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> 
public class Persona
{
    public string nombre;
    public int edad;
}

// Instanciar un objeto de la clase Persona
Persona persona1 = new Persona();

Con Argumentos
Si la clase tiene un constructor que acepta parámetros, debes pasar argumentos correspondientes al instanciar un objeto:

<code> 
public class Persona
{
    public string nombre;
    public int edad;

    // Constructor que acepta dos argumentos
    public Persona(string nombreInicial, int edadInicial)
    {
        nombre = nombreInicial;
        edad = edadInicial;
    }
}

// Instanciar un objeto de la clase Persona con argumentos
Persona persona2 = new Persona("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.

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; } // Constructor public MiClase(int valor1 = 5, string valor2 = "Mundo") { Valor1 = valor1; Valor2 = valor2; } } // 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.

public class Persona 
{
	private string apellido;
	private string nombre;
	
	public Persona()
	{
		apellido = "";
		nombre = "";
	}
}
```js // See https://aka.ms/new-console-template for more information Console.WriteLine("Actors"); var theDarkKnight = new Film(); theDarkKnight.NameFilm = "The Dark Knight"; theDarkKnight.YearFilm = 2008; theDarkKnight.Stars = NumStars.Star4; var tearsOfTheSun = new Film(); tearsOfTheSun.NameFilm = "Tears of the Sun"; tearsOfTheSun.YearFilm = 2003; tearsOfTheSun.Stars = NumStars.Star3; var multiple = new Film(); multiple.NameFilm = "Multiple"; multiple.YearFilm = 2016; multiple.Stars = NumStars.Star3; var americanPsycho = new Film(); americanPsycho.NameFilm = "American Psycho"; americanPsycho.YearFilm = 2000; americanPsycho.Stars = NumStars.Star3; var person1 = new Actor(); var person2 = new Actor(); person1.Id = 1; person1.Name = "Christian Bale"; person1.Oscar = true; List<Film> filmsPerson1 = new List<Film>(); filmsPerson1.Add(theDarkKnight); filmsPerson1.Add(americanPsycho); person1.Films = filmsPerson1; person2.Id = 2; person2.Name = "Bruce Willis"; person2.Oscar = false; List<Film> filmsPerson2 = new List<Film>(); filmsPerson2.Add(tearsOfTheSun); filmsPerson2.Add(multiple); person2.Films = filmsPerson2; class Actor { public int Id; public string Name; public bool Oscar; public List<Film> Films; public Actor() { Id = 1; Name = "Name Actor"; Films = new List<Film>(); Oscar = false; } } class Film { public string NameFilm; public int YearFilm; public NumStars Stars; public Film() { NameFilm = "Name"; YearFilm = 9999; Stars = NumStars.Star0; } } enum NumStars { Star0, Star1, Star2, Star3, Star4, Star5 } ```// See <https://aka.ms/new-console-template> for more informationConsole.WriteLine("Actors"); var theDarkKnight = new Film();theDarkKnight.NameFilm = "The Dark Knight";theDarkKnight.YearFilm = 2008;theDarkKnight.Stars = NumStars.Star4; var tearsOfTheSun = new Film();tearsOfTheSun.NameFilm = "Tears of the Sun";tearsOfTheSun.YearFilm = 2003;tearsOfTheSun.Stars = NumStars.Star3; var multiple = new Film();multiple.NameFilm = "Multiple";multiple.YearFilm = 2016;multiple.Stars = NumStars.Star3; var americanPsycho = new Film();americanPsycho.NameFilm = "American Psycho";americanPsycho.YearFilm = 2000;americanPsycho.Stars = NumStars.Star3; var person1 = new Actor();var person2 = new Actor(); person1.Id = 1;person1.Name = "Christian Bale";person1.Oscar = true; List\<Film> filmsPerson1 = new List\<Film>();filmsPerson1.Add(theDarkKnight);filmsPerson1.Add(americanPsycho); person1.Films = filmsPerson1; person2.Id = 2;person2.Name = "Bruce Willis";person2.Oscar = false; List\<Film> filmsPerson2 = new List\<Film>();filmsPerson2.Add(tearsOfTheSun);filmsPerson2.Add(multiple); person2.Films = filmsPerson2; class Actor{ public int Id; public string Name; public bool Oscar; public List\<Film> Films; public Actor() { Id = 1; Name = "Name Actor"; Films = new List\<Film>(); Oscar = false; }} class Film{ public string NameFilm; public int YearFilm; public NumStars Stars; public Film() { NameFilm = "Name"; YearFilm = 9999; Stars = NumStars.Star0; }} enum NumStars{ Star0, Star1, Star2, Star3, Star4, Star5}
```c# // 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 }; // Heroes var firstHero = new Hero(); var secondHero = new Hero(); var thirdHero = new Hero(); // Hero #1 firstHero.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 #2 secondHero.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 #3 thirdHero.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; } } enum ElementTypeEnum { Normal = 10, Electric = 20, Wind = 30 } enum PowerQualityEnum { Regular = 10, Good = 20, Great = 30 } ```
y qué sucedería si creo el constructor con el keywork private?
Volviendo a ver este curso, me di cuenta que crear un objeto apartir de la clase "SuperHeroe" esta mandado a recoger, o a mi me parece que no me gusta. Hice todo, pero en vez de superheroe, puse Heroe, del tipo de personajes de juegos como Warcraft: //... OOP - Again { 02 - 05 - 2024 } //... Reforzar encapsulamiento, herencia y abstraccion. //... Instanciamos nuestro primer super heroe: Heroe Minrith = new Heroe(); Minrith.id = 1; Minrith.nombre = "Minrith"; //... Nombre Minrith tomado del universo de Tolkien. Minrith.genero = Genero.Hombre; Minrith.nivel = 99; Minrith.vida = 9000; //... Se instancia la descripcion de cada item del heroe: //... Instanciamos los items = Baston antiguo: Item bastonAntiguo = new Item(); //... 1. bastonAntiguo.Nombre = "Baston antiguo."; bastonAntiguo.Descripcion = "Baston que incrementa un 50% el ataque del heroe."; bastonAntiguo.durabilidad = Durabilidad.Indestructible; //... Indestructible el baston. //... Instanciamos los items = Amuleto: Item amuletoElemental = new Item(); //... 2. amuletoElemental.Nombre = "Amuleto elemental."; amuletoElemental.Descripcion = "Amuleto que incrementa las habilidades elementales."; amuletoElemental.durabilidad = Durabilidad.debil; //... Debil el amuleto. //... Instanciamos los items = Espada devoradora: Item espadaDevoradora = new Item(); //... 3. espadaDevoradora.Nombre = "Espada devoradora."; espadaDevoradora.Descripcion = "Espada unica, esta incrementa la defensa del heroe en un 100%."; espadaDevoradora.durabilidad = Durabilidad.Resistente; //... Resistente la espada. //... Instanciamos los items = Escudo de obsidiana: Item escudoObsidiana = new Item(); //... 4. escudoObsidiana.Nombre = "Escudo de obsidiana."; escudoObsidiana.Descripcion = "Escudo que protege el 50% de los ataque de un enemigo."; escudoObsidiana.durabilidad = Durabilidad.vulnerable; //... Vulnerable el escudo. //... Declaramos los poderes y su forma de iteracion: Minrith.superPoderes = new\[] { "Rayo de hielo.", "Tormenta de fuego.", "Hidras de rayo.", "Esfera de luz.", "Meteoritos de fuego." }; //... Declaramos los objetos y su forma de iteracion: Minrith.listaItems = new\[] { "Baston antiguo.", "Amuleto elemental.", "Espada deboradora de fuego.", "Escudo de obsidiana" }; //... Asi iteramos sobre el array: Console.WriteLine(Minrith.listaItems\[4]); //... Creamos la clase: //... Descartamos las propiedades que no son innecesarias. class Heroe //... Es Heroe pero tiene poderes sobrenaturales. { public int id; public string nombre; public Genero genero; public int nivel; //... Esto representa el nivel del heroe. public int vida; //... Esto representa el nivel de vida del heroe. public string\[] superPoderes; public string\[] listaItems; //... Lista de items fisicos que el heroe posee. } //... Agregamos una clase para la descripcion y nombre de los items: class Item { public string Nombre; public string Descripcion; public Durabilidad durabilidad; } public enum Durabilidad { Indestructible = 200, Resistente = 150, vulnerable = 100, debil = 50 } public enum Genero { Hombre = 1, Mujer = 2, }
**Código del objeto Superman, utilizando constructores:** // Clase SuperPoder con constructor class SuperPoder { public string Nombre; public string Descripcion; public NivelPoder Nivel; // Constructor de SuperPoder que asigna nivel1 por defecto public SuperPoder() {      Nivel = NivelPoder.Nivel1; } } // Enumeración para los niveles de poder enum NivelPoder { Nivel1, Nivel2, Nivel3 } // Clase SuperHeroe con constructor class SuperHeroe { public int ID; public string Nombre; public string IdentidadSecreta; public string Ciudad; public List\<SuperPoder> SuperPoderes; public bool PuedeVolar; // Constructor de SuperHeroe que asigna valores por defecto public SuperHeroe() {      ID = 1;      PuedeVolar = false;      SuperPoderes = new List\<SuperPoder>(); } } // Creación del objeto Superman utilizando el constructor SuperHeroe superman = new SuperHeroe(); // Asignación de valores a las propiedades de Superman superman.Nombre = "Superman"; superman.IdentidadSecreta = "Clark Kent"; superman.Ciudad = "Metrópolis"; superman.PuedeVolar = true; // Creación y asignación de superpoderes utilizando el constructor de SuperPoder SuperPoder poderVolar = new SuperPoder(); poderVolar.Nombre = "Volar"; poderVolar.Descripcion = "Capacidad para volar y planear en el aire"; superman.SuperPoderes.Add(poderVolar); SuperPoder superFuerza = new SuperPoder(); superFuerza.Nombre = "Súper Fuerza"; superFuerza.Descripcion = "Capacidad para ejercer fuerza sobrehumana"; superman.SuperPoderes.Add(superFuerza);