¿Cómo definir el comportamiento en las clases con métodos personalizados?
La programación orientada a objetos se centra en representar entidades del mundo real como "objetos" dentro de un software. Cada objeto tiene características (atributos) y comportamientos (métodos). En el lenguaje de programación C#, los métodos son funciones que definen el comportamiento de las clases, permitiendo ejecutar acciones internas. Ahora veremos cómo implementar métodos personalizados en nuestras clases, concretamente en una clase de superhéroe.
¿Cómo crear un método sin retorno en C#?
Para implementar un método en C#, primero se define su tipo de retorno. Un método sin retorno utiliza el tipo void, ejecutando acciones sin devolver valores. Aquí crearemos un método UsarSuperpoderes para iterar sobre los superpoderes de un superhéroe.
publicvoidUsarSuperpoderes(){foreach(var item in superpoderes){ Console.WriteLine($"{nombre} está usando el superpoder {item.Nombre}!");}}
Función void: Significa que la función no devuelve ningún valor externo.
Iteración foreach: Permite recorrer la colección superpoderes e imprimir un mensaje en la consola para cada superpoder.
Al invocar el método en el objeto Superman, se ejecuta así:
Superman.UsarSuperpoderes();
¿Cómo crear un método que devuelve un valor?
Aunque los métodos void son útiles, frecuentemente necesitamos métodos que devuelvan valores. Aquí modificaremos UsarSuperpoderes para retornar un string con los superpoderes usados, usando la clase StringBuilder.
publicstringUsarSuperpoderes(){StringBuilder sb =newStringBuilder();foreach(var item in superpoderes){ sb.AppendLine($"{nombre} está usando el superpoder {item.Nombre}!");}return sb.ToString();}
StringBuilder: Facilita la concatenación de cadenas de texto.
AppendLine: Añade líneas al StringBuilder.
Luego, al invocar este método y obtener el resultado:
Ambas formas de implementación tienen su utilidad dependiendo del contexto y necesidades del proyecto.
¿En qué casos utilizar métodos sin o con retorno?
Métodos void: Son idóneos para acciones internas que no requieren comunicar resultados (p. ej., logging, actualizaciones de estado).
Métodos con retorno: Útiles cuando es necesario procesar datos y devolver información al exterior para su posterior uso (p. ej., cálculos y transformaciones).
En resumen, aprovechar la capacidad de los métodos para definir comportamientos de tus clases permitirá crear software más modular y organizado. Continúa explorando C# para dominar otros conceptos importantes como estructuras y registros, que también potencian la creación de código eficiente en programación orientada a objetos.
Solo por comentar , que mientras estaba realizando estos cursos , por fin , despues de 2 años de busqueda , me ha salido trabajo de programador.
Tengo 40 años y ha sido dificil .Esto es una carrera de fondo , asi que si estan ahi pensando en rendirse , aunque se que hay dias que es dificil , no cejen en el empeño y luchen por una vida mejor
gracias, eso trato de no rendirme jeje la verdad confunde mucho todo lo que se explica pero poco a poco se puede ir aprendiendo . un dia a la vez!
Que ejemplo, de verdad sigue aprendiendo y quitando esos estereotipos de la edad, te mando un abrazo y mucha fuerza para que continues tu camino como programador hasta volverse senior.
Como recomendación al profe Miguel, para estos temas educativos es mucho más fácil para uno como estudiante entender si en lugar de poner cosas como:
var item inSuperPoderes
Pones:
var poder in SuperPoderes
Obviamente es lo mismo porque solamente es una variable, pero es mucho más fácil de entender para quien lee el código si ponemos un nombre que corresponda al objeto que vamos a iterar, en lugar de poner algo genérico como "item".
totalmente de acuerdo aunque solamente es un poco más de prestar atención al código. sin embargo yo en vez de poner "poder" por el item, utilicé "power" asi no menciono tanto en el código las palabras poder,poderes,superpoderes etc ...
Totalmente de acuerdo, programar es cómo escribir un libro, hay que nombrar de forma correcta las variables para que cualquiera pueda entender nuestro código.
💡 Esta imagen ilustra muy bien la diferencia entre clases, objetos, atributos y métodos:
using System.Text;FinishAttack elephantGun =newFinishAttack();elephantGun.Name="Elephant Gun";elephantGun.Description="Giant fist wrapped in weaponry haki";elephantGun.Damage=200.5;FinishAttack redHawk =newFinishAttack();redHawk.Name="Red Hawk";redHawk.Description="Rubber Fist wrapped in weaponry haki and fire";redHawk.Damage=280.5;DevilFruit gomugomu =newDevilFruit();gomugomu.Name="Gomu Gomu No Mi";gomugomu.Description="The User have the complex of rubber and in his awakening converts into Nika God";gomugomu.Type=TypeDevilFruit.Zoan;OnePieceCharacter luffy =newOnePieceCharacter();luffy.Name="Monkey D. Luffy";luffy.Description="Future King of Pirates";luffy.Occupation=Occupation.Pirate;luffy.HaveFruit=true;luffy.Fruit= gomugomu;luffy.FinishAtacks.Add(elephantGun);luffy.FinishAtacks.Add(redHawk);string infoLuffy = luffy.GetInfo();Console.WriteLine("ONE PIECE GAME:");Console.WriteLine(infoLuffy);classOnePieceCharacter{public int Id;public string Name;public string Description;publicOccupationOccupation;public bool HaveFruit;publicDevilFruit?Fruit;publicList<FinishAttack>FinishAtacks;public double Life;publicOnePieceCharacter(){Id=1;Occupation=Occupation.Civil;FinishAtacks=newList<FinishAttack>();Life= 1000d;HaveFruit=false;Fruit=null;}public string GetInfo(){StringBuilder sb =newStringBuilder(); sb.AppendLine($"Nombre: {Name}"); sb.AppendLine($"Descripcion: {Description}"); sb.AppendLine($"Ocupacion: {Occupation}");if(Fruit!=null){ sb.AppendLine($"Fruta del diablo: {Fruit?.Name}");}else{ sb.AppendLine($"Fruta del diablo: No tiene");}foreach(var atack inFinishAtacks){ sb.AppendLine($"Ataque: {atack.Name} -> {atack.Damage} damage");}return sb.ToString();}}classDevilFruit{public string Name;public string Description;publicTypeDevilFruitType;publicDevilFruit(){Type=TypeDevilFruit.Paramecia;}}enumOccupation{Civil,Pirate,Marine,Revolutionary}enumTypeDevilFruit{Paramecia,Zoan,Logia}classFinishAttack{public string Name;public string Description;public double Damage;publicFinishAttack(){Damage= 10d;}}
esta excelente tu ejemplo !!!
si al usar: StringBuilder sb = new StringBuilder(); sale error es que al principio del archivo debes de usar: using System.Text;
Buenas como un dato de lo que pude identificar al momento de utilizar string solo puedes utilizarlo solo una vez para cada personaje no puedes declarar dos veces la misma variable con el nombre comparto mi código```c#
// Proyecto de One Piece para diferenciar las frutas que tienen los personajes, debilidades, fuerza y niveles de despertar
// Se crea una instacia de la clase PoderesPirataOnePiece representando a Luffy
using System.Text;
var NikaPoderes = new PoderesPiratasOnePiece();
NikaPoderes.Nombre = "Gear Fifth"; // Nombre del poder de Luffy.
NikaPoderes.Descripcion = "Luffy alcanza un nuevo nivel de poder con su Gear Fifth, que le permite manipular su cuerpo como si fuera de goma y aumentar su fuerza y velocidad a niveles increíbles.";// Descripción del poder de Luffy.
NikaPoderes.Nivel = NivelPiratasOnePiece.MuyAlta; // Luffy tiene una recompensa muy alta debido a su poder y hazañas.
// Se crea una segunda instancia de la clase PoderesPirataOnePiece representando a Luffy
var NikaHaki = new PoderesPiratasOnePiece();
NikaHaki.Nombre = "Haki del Rey"; // Nombre del poder de Luffy.
NikaHaki.Descripcion = "Luffy ha desarrollado un Haki del Rey extremadamente poderoso, que le permite dominar a sus oponentes y aumentar su presencia en el campo de batalla.";// Descripción del poder de Luffy.
NikaHaki.Nivel = NivelPiratasOnePiece.MuyAlta; // Luffy tiene una recompensa muy alta debido a su poder y hazañas.
// Se crea una instacia de la clase PoderesPirataOnePiece representando a Zoro
var RoronoaPoderes = new PoderesPiratasOnePiece();
RoronoaPoderes.Nombre = "Santoryu"; // Nombre del poder de Zoro.
RoronoaPoderes.Descripcion = "Zoro utiliza su técnica de Santoryu, que le permite manejar tres espadas a la vez, aumentando su poder de ataque y defensa.";// Descripción del poder de Zoro.
RoronoaPoderes.Nivel = NivelPiratasOnePiece.Alta; // Zoro tiene una recompensa alta debido a su habilidad y logros.
// Se crea una segunda instancia de la clase PoderesPirataOnePiece representando a Zoro
var RoronoaHaki = new PoderesPiratasOnePiece();
RoronoaHaki.Nombre = "Haki de Observación"; // Nombre del poder de Zoro.
RoronoaHaki.Descripcion = "Zoro ha perfeccionado su Haki de Observación, lo que le permite anticipar los movimientos de sus oponentes y reaccionar con rapidez.";// Descripción del poder de Zoro.
RoronoaHaki.Nivel = NivelPiratasOnePiece.Alta; // Zoro tiene una recompensa alta debido a su habilidad y logros.
// Se crea una instancia de la clase PirataOnePiece representando a Luffy
var luffy = new PiratasOnePiece();
luffy.Id = 1;
luffy.Nombre = "Monkey D. Luffy";
luffy.FrutaDelDiablo = "Gomu Gomu no mi";
luffy.Tripulación = "Sombrero de Paja";
luffy.PuedeNadar = false;
//Utilizo las clases de PoderesPirata de la linea 68 del codigo
List<PoderesPiratasOnePiece> poderesLuffy = new List<PoderesPiratasOnePiece>();
poderesLuffy.Add(NikaPoderes); // Agrega el poder Gear Fifth a la lista de poderes de Luffy.
poderesLuffy.Add(NikaHaki); // Agrega el poder Haki del Rey a la lista de poderes de Luffy.
luffy.Poderes = poderesLuffy;
string resultUsarPoderes = luffy.UsarPoderes(); // Llama al método UsarPoderes() de Luffy, que recorre y muestra todos los poderes que posee.
Console.WriteLine(resultUsarPoderes); // Muestra por consola los poderes que está usando Luffy.
// Se crea una instancia de la clase PirataOnePiece representando a Zoro
var zoro = new PiratasOnePiece();
zoro.Id = 2;
zoro.Nombre = "Zoro";
zoro.FrutaDelDiablo = "Ninguna";
zoro.Tripulación = "Sombrero de Paja";
zoro.PuedeNadar = true;
//Utilizo las clases de PoderesPirata de la linea 68 del codigo
List<PoderesPiratasOnePiece> poderesZoro = new List<PoderesPiratasOnePiece>();
poderesZoro.Add(RoronoaPoderes); // Agrega el poder Santoryu a la lista de poderes de Zoro.
poderesZoro.Add(RoronoaHaki); // Agrega el poder Haki de Observación a la lista de poderes de Zoro.
zoro.Poderes = poderesZoro; // Asigna la lista de poderes a Zoro.
resultUsarPoderes = zoro.UsarPoderes(); // Llama al método UsarPoderes() de Luffy, que recorre y muestra todos los poderes que posee.
Console.WriteLine(resultUsarPoderes); // Muestra por consola los poderes que está usando Luffy.
// Clase que representa a un pirata del universo One Piece.
class PiratasOnePiece
{
public int Id = 1; //Identificador único del pirata.
public string Nombre;// Nombre del pirata.
public string FrutaDelDiablo; // Nombre de la fruta del diablo que posee el pirata(si tiene).
public string Tripulación; // Nombre de la tripulación a la que pertenece el pirata.
public List<PoderesPiratasOnePiece> Poderes = new List<PoderesPiratasOnePiece>(); //Niveles de despertar alcanzados por el pirata (puede ser una lista de habilidades o etapas).
public bool PuedeNadar; //Indica si el pirata puede nadar (los usuarios de frutas del diablo no pueden nadar).
//Creación de constructor para la Clase PiratasOnePicepublicPiratasOnePiece(){Id=1;// Inicializa el identificador del pirata con el valor 1 por defecto.Poderes=newList<PoderesPiratasOnePiece>();// Crea una lista vacía de poderes para el pirata.PuedeNadar=false;// Por defecto, el pirata no puede nadar (útil para usuarios de frutas del diablo).}// Método que recorre y muestra todos los poderes que posee el pirata con public void UsarPoderes()//public void UsarPoderes()//{// // Recorre cada poder en la lista de poderes del pirata.// foreach (var item in Poderes)// {// // Muestra por consola el nombre del pirata y el poder que está usando.// Console.WriteLine($"{Nombre} Esta usando el poder {item.Nombre}!!");// }//}//Metodo que recorre y muestra todos los poderes que posee el pirata con public string UsarPoderes()public string UsarPoderes(){StringBuilder stringBuilder =newStringBuilder();// Crea un StringBuilder para construir la cadena de salida.// Recorre cada poder en la lista de poderes del pirata.foreach(var item inPoderes){// Agrega el nombre del pirata y el poder que está usando al StringBuilder. stringBuilder.AppendLine($"{Nombre} Esta usando el poder {item.Nombre}!!");}return stringBuilder.ToString();// Devuelve la cadena construida por el StringBuilder.}
}
//Clase que representa los poderes de un pirata del universo One Piece.
class PoderesPiratasOnePiece
{
public string Nombre; // Lista de habilidades del pirata.
public string Descripcion; // Lista de debilidades del pirata.
public NivelPiratasOnePiece Nivel; // Nivel de despertar del pirata.
// Constructor de la clase PoderesPiratasOnePiece.// Este constructor inicializa el nivel del poder como MuyAlta por defecto,// lo que indica que, si no se especifica otro valor, el poder será considerado de nivel muy alto.publicPoderesPiratasOnePiece(){Nivel=NivelPiratasOnePiece.MuyAlta;// Asigna el nivel MuyAlta como valor predeterminado al crear un nuevo poder.}
}
// Clase que representa los niveles de un pirata del universo One Piece.
enum NivelPiratasOnePiece
{
Bajo = 1000000, // Recompensa baja.
Media = 5000000, // Recompensa media.
Alta = 10000000, // Recompensa alta.
MuyAlta = 50000000 // Recompensa muy alta.
}
Se me hace un poco extraño que las propiedades de una clase vayan en minúscula, así es la convención pero es curioso jaja.
Debe publicar en el curso el codigo que va implementando, para poder copiarlo o comparar con lo que uno transcribe, y sea de ayuda
Métodos dentro de una clase en C# POO:
En resumen:
Los métodos son acciones que una clase puede realizar.
Se definen dentro de la clase con una estructura similar a una función.
Permiten encapsular funcionalidad y reutilizarla.
Pueden tener diferentes tipos de acceso (public, private, etc.)
Pueden tener parámetros para recibir datos y devolver valores.
Modularidad: Dividen el código en partes más pequeñas y manejables.
Reutilización: Permiten usar la misma funcionalidad en diferentes partes del código.
Encapsulamiento: Ocultan detalles de implementación y solo exponen la funcionalidad necesaria.
// See https://aka.ms/new-console-template for more informationvar poderVolar = new SuperPoder();poderVolar.Nombre ="Volar";poderVolar.Descripcion ="Capacidad para volar y planear en el aire";poderVolar.Nivel = NivelPoder.NivelDos;var superFuerza = new SuperPoder();superFuerza.Nombre ="Super fuerza";superFuerza.Nivel = NivelPoder.NivelTres;var sentidoArácnido = new SuperPoder();sentidoArácnido.Nombre ="Sentido arácnido";sentidoArácnido.Nivel = NivelPoder.NivelDos;var visiónRayosLaser = new SuperPoder();visiónRayosLaser.Nombre ="Visión Rayos Láser";visiónRayosLaser.Nivel = NivelPoder.NivelTres;SuperHeroeMarvel superman = new SuperHeroeMarvel();superman.Id =1;superman.Nombre ="Superman";superman.IdentidadSecreta ="Clark Kent";superman.Ciudad ="Metropolis";superman.PuedeVolar = true;List<SuperPoder> poderesSuperman = new List<SuperPoder>();poderesSuperman.Add(superFuerza);poderesSuperman.Add(poderVolar);poderesSuperman.Add(visiónRayosLaser);superman.SuperPoderes = poderesSuperman;superman.UsarSuperPoderes();SuperHeroeMarvel spiderman = new SuperHeroeMarvel();spiderman.Id =2;spiderman.Nombre ="Spider-Man";spiderman.IdentidadSecreta ="Peter Parker";spiderman.Ciudad ="New York";spiderman.PuedeVolar = false;List<SuperPoder> poderesSpiderman = new List<SuperPoder>();poderesSpiderman.Add(sentidoArácnido);poderesSpiderman.Add(superFuerza);spiderman.SuperPoderes = poderesSpiderman;spiderman.UsarSuperPoderes();SuperHeroeMarvel thor = new SuperHeroeMarvel();thor.Id =3;thor.Nombre ="Thor";thor.IdentidadSecreta ="Thor";thor.Ciudad ="Olimpo";thor.PuedeVolar = true;List<SuperPoder> poderesThor = new List<SuperPoder>();poderesThor.Add(poderVolar);poderesThor.Add(superFuerza);thor.SuperPoderes = poderesThor;thor.UsarSuperPoderes();
class SuperHeroeMarvel
{ public int Id=1; public string Nombre; public string IdentidadSecreta; public string Ciudad; public List<SuperPoder> SuperPoderes =new List<SuperPoder>(); public bool PuedeVolar; public SuperHeroeMarvel(){ Id =1; SuperPoderes= new List<SuperPoder>(); PuedeVolar = false;} public voidUsarSuperPoderes(){foreach(var item in SuperPoderes){ Console.WriteLine($"{Nombre} está usando el super poder {item.Nombre}!!");}}}
class SuperPoder
{ public string Nombre; public string Descripcion; public NivelPoder Nivel; public SuperPoder(){ Nivel = NivelPoder.NivelUno;}}enumNivelPoder{ NivelUno, NivelDos, NivelTres
}
using System;using System.Collections.Generic;using System.Text;namespace EjercicioPOO{// 1 Definimos los noveles de poder con un ENUM enumNivelPoder{NivelUno,NivelDos,NivelTres}// 2 Clase para representar un SuperPoderclassSuperPoder{public string Nombre;public string Descripcion;publicNivelPoderNivel;}// 3 Clase Principal SuperHeroeclassSuperHeroe{publicGuidId;public string Nombre;public string IdentidadSecreta;public string Ciudad;publicList<SuperPoder>SuperPoderes;public bool PuedeVolar;//Metodo sin Retorno (void): Realiza una Accion InmediatapublicvoidRealizarSaludo(){Console.WriteLine($"{Nombre} dice: '¡Chimichangas! soy {IdentidadSecreta}... digo, ¡{Nombre}!'");}//Metodo con Retorno (String): Procesa datos y devuelve una cadena usando StringBuilderpublic string UsarSuperpoderes(){StringBuilder sb =newStringBuilder(); sb.AppendLine($"--- REPORTE DE ACCION: {Nombre} ---");foreach(var poder inSuperPoderes){ sb.AppendLine($"> Activando {poder.Nombre}: {poder.Descripcion} (Nivel: {poder.Nivel})");}return sb.ToString();}}// 4 Clase Program: El orquestador del sistemaclassProgram{staticvoidMain(string[] args){//Creamos los Poderes de Deadpool como objetos de la clase SuperPodervar regeneracion =newSuperPoder{Nombre="Factor de Curacion",Descripcion="Regeneracion Celular Acelerada ante Caulquier Daño.",Nivel=NivelPoder.NivelTres};varKatanas=newSuperPoder{Nombre="Maestro de Armas",Descripcion="Uso experto de Katanas dobles y punteria perfecta",Nivel=NivelPoder.NivelDos};//Instanciamos nuestro SuperHeroevar deadpool =newSuperHeroe(); deadpool.Id=Guid.NewGuid(); deadpool.Nombre="Deadpool"; deadpool.IdentidadSecreta="Wade Wilson"; deadpool.Ciudad="Nueva York"; deadpool.PuedeVolar=false;//Asignamos la Lista de Poderes deadpool.SuperPoderes=newList<SuperPoder>{ regeneracion,Katanas};// --- EJECUCION DE COMPORTAMIENTOS --- //Llamada al metodo void deadpool.RealizarSaludo();Console.WriteLine();// Llamada al metodo con retorno // Almacenamos el string resultante en una variable y luego lo imprimimos string reporteCombate = deadpool.UsarSuperpoderes();Console.WriteLine(reporteCombate);// Evitamos que la consola se cierre automaticamenteConsole.WriteLine("Presiona cualquier tecla para finalizar el ejercicio...");Console.ReadKey();}}}
en c#, es un estándar escribir la primera letra del nombre de las propiedades de una clase y el nombre de los elementos en mayúscula?
Correcto, solo los parametros o depronto variables privadas se inican con minuscula
Los métodos son bloques de código que realizan una tarea específica dentro de una clase o un objeto. Son una forma de encapsular acciones o comportamientos que un objeto puede realizar, y permiten reutilizar el código y organizarlo de manera lógica.
Un método se compone de:
Modificadores de acceso: Definen la visibilidad del método (público, privado, protegido, etc.).
Tipo de retorno: Es el tipo de dato que el método devuelve. Si no devuelve nada, el tipo de retorno es void.
Nombre del método: Debe ser un identificador único dentro de la clase.
Parámetros (opcional): Los datos que el método recibe cuando es invocado. Se definen entre paréntesis.
Cuerpo del método: Es el bloque de código que contiene las instrucciones que se ejecutarán.
[modificador de acceso][tipo de retorno] nombre del método
{// Código del método}
Los métodos son bloques de código que realizan una tarea específica dentro de una clase o un objeto. Son una forma de encapsular acciones o comportamientos que un objeto puede realizar, y permiten reutilizar el código y organizarlo de manera lógica.
Un método se compone de:
Modificadores de acceso: Definen la visibilidad del método (público, privado, protegido, etc.).
Tipo de retorno: Es el tipo de dato que el método devuelve. Si no devuelve nada, el tipo de retorno es void.
Nombre del método: Debe ser un identificador único dentro de la clase.
Parámetros (opcional): Los datos que el método recibe cuando es invocado. Se definen entre paréntesis.
Cuerpo del método[modificador de acceso] [tipo de retorno] [nombre del método]([parámetros]) { // Código del método }: Es el bloque de código que contiene las instrucciones que se ejecutarán.
[modificador de acceso][tipo de retorno] nombre del método
{// Código del método}
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();
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;
string resultMoviesArtist1 = person1.ActInTheMovie();
Console.WriteLine(resultMoviesArtist1);
var person2 = new Actor();
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;
string resultMoviesArtist2 = person2.ActInTheMovie();
Console.WriteLine(resultMoviesArtist2);
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;
}
public string ActInTheMovie()
{
StringBuilder sb = new StringBuilder();
foreach (var movie in Films)
{
sb.AppendLine($"{Name} act in the film {movie.NameFilm}");
}
return sb.ToString();
}
}
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
}
Decidí implementar un nuevo método para practicar lo aprendido :) ! Espero que les ayude 🤓
// SuperPowers.using System.Text;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
};// Colorsvar redColor = new Colors
{ Name ="Red"};var blackColor = new Colors
{ Name ="Black"};var yellowColor = new Colors
{ Name ="Yellow"};var whiteColor = new Colors
{ Name ="White"};// 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.IsHuman = true;List<Colors> incredibleColorsCostume = new List<Colors>();incredibleColorsCostume.Add(redColor);incredibleColorsCostume.Add(blackColor);incredibleColorsCostume.Add(yellowColor);List<SuperPower> incrediblePower = new List<SuperPower>();incrediblePower.Add(strengthPower);firstHero.Powers = incrediblePower;string powersFirst = firstHero.UseSuperPower();Console.WriteLine(powersFirst);firstHero.ColorsCostume = incredibleColorsCostume;string colorsFirst = firstHero.GetColorsCostume();Console.WriteLine(colorsFirst);// Hero #2secondHero.ID =2;secondHero.RealName ="Barry Allen";secondHero.HeroName ="Flash";secondHero.CanFly = false;secondHero.IsHuman = true;List<Colors> flashColors = new List<Colors>();flashColors.Add(redColor);flashColors.Add(yellowColor);List<SuperPower> flashPower = new List<SuperPower>();flashPower.Add(speedPower);secondHero.Powers = flashPower;string powersSecond = secondHero.UseSuperPower();Console.WriteLine(powersSecond);secondHero.ColorsCostume = flashColors;string colorsSecond = secondHero.GetColorsCostume();Console.WriteLine(colorsSecond);// Hero #3thirdHero.ID =3;thirdHero.RealName ="Ororo Munroe";thirdHero.HeroName ="Storm";thirdHero.CanFly = true;thirdHero.IsHuman = false;List<Colors> stormColors = new List<Colors>();stormColors.Add(whiteColor);stormColors.Add(yellowColor);stormColors.Add(redColor);stormColors.Add(blackColor);List<SuperPower> stormPower = new List<SuperPower>();stormPower.Add(windPower);stormPower.Add(electricPower);thirdHero.Powers = stormPower;string powerThird = thirdHero.UseSuperPower();Console.WriteLine(powerThird);thirdHero.ColorsCostume = stormColors;string thirdColors = thirdHero.GetColorsCostume();Console.WriteLine(thirdColors);
class Hero
{ public int ID { get; set;} public string RealName { get; set;} public string HeroName { get; set;} public bool CanFly { get; set;} public List<Colors> 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<Colors>(); IsHuman = false; Powers = new List<SuperPower>();} public string UseSuperPower(){ StringBuilder sb = new StringBuilder();foreach(var item in Powers){ sb.AppendLine($"The hero {HeroName} just use the super power {item.Name}");}return sb.ToString();} public string GetColorsCostume(){ StringBuilder sb = new StringBuilder();foreach(var item in ColorsCostume){ sb.AppendLine($"The color {item.Name} its include in the costume of the hero {HeroName}");}return sb.ToString();}}
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;}}
class Colors
{ public string Name { get; set;} public Colors(){ Name = string.Empty;}}enumElementTypeEnum{ Normal =10, Electric =20, Wind =30}enumPowerQualityEnum{ Regular =10, Good =20, Great =30}
StringBuilder es una clase en C# que se utiliza para representar una cadena de caracteres mutable. A diferencia de las cadenas de caracteres normales (string) en .NET, que son inmutables, StringBuilder permite modificar el contenido de la cadena sin generar una nueva instancia de cadena cada vez que se realiza una modificación. Esto lo hace especialmente útil para operaciones que requieren cambios frecuentes en el contenido de la cadena, como la concatenación repetida, porque mejora el rendimiento al reducir la cantidad de objetos string innecesarios creados en la memoria.
Este código crea un StringBuilder, le añade algunas líneas de texto utilizando AppendLine y luego imprime el resultado final.
<code>using System;using System.Text;classProgram{staticvoidMain(){// Crear una instancia de StringBuilder.StringBuilder sb =newStringBuilder();// Añadir algunas líneas de texto. sb.AppendLine("Primera línea."); sb.AppendLine("Segunda línea."); sb.AppendLine("Tercera línea.");// También se puede añadir texto sin un salto de línea al final. sb.Append("Final sin salto de línea.");// Convertir el StringBuilder a string y mostrar el resultado. string resultado = sb.ToString();Console.WriteLine(resultado);}}
se crea un objeto StringBuilder llamado sb. Luego, se utiliza el método AppendLine para añadir tres líneas de texto a sb, cada una seguida de un salto de línea. Después, se añade una línea sin salto de línea al final usando el método Append. Finalmente, se convierte el contenido de sb a un string usando el método ToString y se imprime en la consola.
La salida del programa sería:
<code>Primera línea.Segunda línea.Tercera línea.Final sin salto de línea.
// Método Adicional para la Clase SuperHeroe:
// Descripción: Este método, llamado GritarNombre, permite que el superhéroe imprima en consola un mensaje proclamando su nombre y su determinación para defender la ciudad.
public void GritarNombre()
{
Console.WriteLine($"¡Soy {Nombre} y defenderé la ciudad!");
}
// Ejemplo de invocación
Superman.GritarNombre();
// Método Adicional para la Clase SuperPoder:
// Descripción: El método ObtenerInformacion devuelve una cadena que contiene información detallada sobre el superpoder, incluyendo nombre, descripción y nivel.
Mi aporte basado en uno de mis juegos favoritos, Monster Hunter!
using System.Text;MonsterRath00=new(){ name ="Rathalos", specie =Species.FlyingWyvern, weakness ="Dragon", resistance ="Fire",location=Locations.AncientForest,};Console.WriteLine($"Name: {Rath00.name}");Console.WriteLine($"Specie: {Rath00.specie}");Console.WriteLine($"Weakness: {Rath00.weakness}");Console.WriteLine($"Resistance: {Rath00.resistance}");Console.WriteLine($"Location: {Rath00.location}");Rath00.Attack();Rath00.Move();Console.WriteLine(Rath00.GetMonster());classMonster{// VARIABLES //public string name;publicSpecies specie;public string weakness;public string resistance;publicLocationslocation;// CONSTRUCTOR //publicMonster(){ name =""; weakness =""; resistance ="";}// METHODS //publicvoidMove(){Console.WriteLine($"{name} is moving");}publicvoidAttack(){Console.WriteLine($"{name} hits!");}public string GetMonster(){StringBuilder sb =new(); sb.AppendLine($"This monster is called {name}, you can found it in {location}");return sb.ToString();}}enumSpecies{FlyingWyvern,BirdWyvern,BruteWyvern,ElderDragon}enumLocations{AncientForest,WildspireWaste,CoralHighlands,RottenVale,EldersRecess}