Ya había tomado esta lección en el curso de Java y pensé que mejor explicado no podía estar, y ahora veo este curso y mejora la explicación increíblemente, no cabe duda profe que a usted lo tenemos que proponerlo para algo estilo premio Nobel, es increíble su dedicación. Mil gracias
agradezco terriblemente tu trabajo es lo mejor, tal vez viva en Venezuela y no pueda pagar ni un curso básico de algo de unos 20$ y tenga 14 años pero me encanta saber que gratuitamente hay personas como tu dando contenido de calidad dando una explicación a detalle sobre algún tema, gracias, gracias a ti aprendí php, sql y javascript y ahora c#
@SoyFantasmita. Wepale. Buenas amigo, actualmente soy de 20 y bueno... Hace unos años que deje la programación, por raro que parezca, me dedico al boxeo tiempo completo y ya el año que viene debuto como profesional. La vida da muchas vueltas pero, eran buenos tiempos aquellos. 🙂
Le tengo que poner pausa al vídeo porque ojala en mis días de estudio me hubiesen explicado con esta paciencia y detenimiento sobre los métodos Get y Set, solo le puedo decir muchas gracias, no todas las persona vienen con la habilidad de transmitir su conocimiento.
Aaaaaaaaa por la cresta profe, me hizo el día, con este vídeo logré entender muchas cosas que no pude entender el primer año de programación. Muchísimas gracias por sus vídeos.
Muchísimas gracias. En mi aprendizaje de programación iba superrápido hasta que me topé con los constructores, los getters y los setters. De momento, lo tengo más claro, necesito ponerlo en práctica pero lo tengo más claro.
Excelente video, x fin comprendí qué es un constructor y para qué sirve. Muy clara la manera de explicar. Además me voy con un adicional que es la sobrecarga de constructores, también me quedó absolutamente claro. Muchas gracias.
Que alegria estar en 2021 y no esperar por los videos son un crack! Depronto para los que lo esten viendo escribiendo ctor y doble tab se puede crear el metodo constructor sin que marque error ya que a mi me pasaba. Buenos videos!!
Marzo 2024: Estoy usando .NET 8 y se Visual Studio me ofrece otra forma más concisa de realizar los constructores. De todos modos la forma que nos muestras ayuda mucho a entender cuando nos enfrentemos a código de versiones anteriores. Tus explicaciones son muy claras. Gracias por tus enseñanzas 😄
hola papa estoy haciendo el curso tuyo de java . incrementando lo que se con lo tuyo . tamhien programo en c# es buenisima tu pedagogia . te felicito por seguir con esto
No se si vas a explicarlo más adelante, pero por si las moscas C# tiene algo muy de mi agrado que es que cuando declaras una propiedad puedes definir los getters al mismo tiempo: namespace ConsoleApllication1 { class Coche { private int ruedas { get; }; } } y si quieres getters y setters: private int ruedas { get; set; } te define el getter y el setter al mismo tiempo sin tener tu que crear un método especial. Muy buena la explicación del video saludos desde México sigue así.
Al principio me pareció muy útil, pero luego he visto que existe el modificador readonly que hace básicamente lo mismo, solo que también parece estar en otros lenguajes y supongo que tendrá usos más generales. Supongo que más tarde enseñará readonly y por eso no ha comentado nada de esto.
Tambien estaba pensando lo mismo durante el video, a mi me excitan las propiedades asi se ahorra mucho codigo basura que en lenguajes como Java no se puede.
Juan por favor, no te olvides de explicar en algún vídeo cómo podemos encarar documentación de lenguages de programación, librerías, etc. Eso de que nadie nace enseñado y que seguro que vosotros los experimentados sabéis cómo encarar sin que os enseñe nadie. Que a veces viene mal explicado. En el caso de librerías de jQuery por ejemplo venía mejor explicado dentro del JS de las propias librerías que en la documentación. Pues a eso me refiero. Esa experiencia de saber por dónde hilar para entender a veces lo inentendible. A mí me hace depender siempre de alguien que me explique. Y ya van como 4 lenguajes de programación que toco y que no termino porque me noto que no puedo ser independiente en aprendizaje por mi cuenta si necesito algo muy concreto. No sé, es complejo, como la propia informática. No puedo ver 5 cursos diferentes por ejemplo por falta de tiempo. Sabiendo encarar ese aprendizaje por escrito, sería más rápido si necesito bootstrap, por ejemplo, vue.js, etc, etc, etc. A eso es a lo que voy. Gracias por tus enseñanzas. He aprendido por fin la POO. P.D.: Voy a ser muy pesado con esto. Me parece importante para todos.
En el minuto 7:23 la palabra reservada "new" no llama al constructor, sino que indica al compilador que debe crear un objeto de una clase determinada que se indica a continuación de new, para este ejemplo sería la clase Coche; quien llama al constructor es la instrucción "Coche()" que viene después de la palabra reservada "new", no es new en sí quien llama al constructor.
¡Estoy llevando el curso en 2023 y está increíble! Lo más valioso es que no solo se aprende la sintaxis sino los fundamentos y conceptos detrás de la misma. Muchísimas gracias. Me gustaría hacer una consulta. ¿Cuál es la diferencia de escribir el tipo de las variables string con mayúsculas o minúsculas en la primera letra? He hecho la prueba y no veo ninguna diferencia al ejecutar código pero Visual Studio muestra un color de texto diferente cuando se escribe "string" que cuando se escribe "String". También se muestra un ícono distinto, según la palabra tenga mayúscula o minúscula inicial, cuando se despliega el menú de sugerencias de autocompletado.
En esta clase se explica mas o menos, pero basicamente se puede explicar que cuando hablamos de las cadenas de caracteres, no es un tipo de dato primitivo asi como int, double, float, etc, las cadenas de caracteres deben ir relacionadas con la clase String, por lo tanto lo que hacemos siempre es crear instancias de esa clase String, asi que se debe respetar el uso y el cómo crear instancias de dicha clase.
Justo al final del video me preguntaba pro que en el video de circulo se llama al constructor (que no existe) ya entendí Mil gracias de nuevo y saludos.
Gracias por el nuevo capítulo, se echaba de menos. Igual estoy metiéndome en camisa de once varas, pero VS tiene un generador de getters setters cuando se pulsa con botón derecho en una variable private. el código resultante se intuye pero me resulta un poco extraño. Por ejemplo si lo hacemos para la propiedad largo de la clase coche private double largo; se genera public double Largo { get => largo; set => largo = value; } es bastante intuitivo y está claro que esto nos permitirá acceder a la propiedad con el operador punto. Por ejemplo Console.WriteLine( coche1.Largo); no dará ningún error. Lo que no acabo de entender es la estructura, es decir, porque es coche1.Largo sin paréntesis y no coche1.Largo(). Por cierto creo que lo que no entiendo son las expresiones del tipo get=>largo; operador lambda me parece que se llaman, y me llevan loco desde la primera vez que las vi. Como imagino que aun no tocan este tipo de expresiones, mientras llega el momento ¿No sabrás de algún sitio donde empezar a hincarles el diente? Gracias otra vez por aguantar a los coñazos que preguntamos cosas raras
hola papa porqie progranas en vs , mantenes software porqke ya no se usa mucho sino que todo se hace en c# es mas facil la sintaxis . la potencia es muy similar son lenguajes potentes y permiten un desarrollo rapido. lo de la sintaxis labda fijate en goglle sale todo
Yo tenía un profesor que me había dicho que los Getters/Setters que usaban particularmente la palabra get o set, como GetCantidadRuedas() simplemente retornaban o establecían valores, sin condiciones. Pero ahora que estoy llevando este curso me estoy dando cuenta que toda mi vida no he sabido entenderlo bien, ya que un set sin condicionales o evaluaciones sería lo mismo a poner un valor directo en la instancia, es decir, igual puedo poner ruedas negativas a ese coche si yo quiero. Entonces no le encuentro mucho sentido a lo que me habían enseñado. Ahora bien, por separación de responsabilidades pienso que mi profesor sí pudo tener razón, que exista una función con la palabra clave get o set solamente si es un valor que se modifica directamente sin importar nada y si hay un valor que requiere de procedimientos adicionales evaluativos llamarle de diferente forma, por ejemplo, EstablecerCantidadRuedas()
@pildorasinformaticas Vaya hombre eres un crack. Tienes algún curso para unity? Así sea de pago? Me gusta como explicas las cosas. Tienes el don de enseñar.
Aquí dejo mi pequeño programa con lo aprendido hasta ahora Determina el área de un circulo, cuadrado, rectángulo o triangulo a decisión del usuario. namespace Areas_de_figuras_geometricas__clases_metodos_ { internal class Program /* Programa que permite calcular el area de ciertas figuras geometricas sencillas, utilizando mis copnocimientos hasta ahora (Switch, While, Do- While, Clases, Metodos, metodos anidados(?), execpciones tanto try catch como throw. Se podria hacer mes sencillo por supuesto (thumbs up)*/ { //PD: Faltaria el tema de constructores pero asi esta bien. static void Main(string[] args) { Console.WriteLine("-------Seleccione la figura geometrica------"); Console.WriteLine("1.Circulo 2.Cuadrado 3.Rectangulo 4.Triangulo"); int eleccion;
eleccion = int.Parse(Console.ReadLine()); try { Console.WriteLine($"El area del rectangulo es: {Area(eleccion)} metros al cuadrado"); } catch (ArgumentOutOfRangeException ex) { do { Console.WriteLine("Solo se pueden seleccionar esos 3"); Console.WriteLine("Digite su seleccion: "); eleccion = int.Parse(Console.ReadLine()); } while (eleccion < 0 || eleccion > 4); Console.WriteLine($"El area del rectangulo es: {Area(eleccion)} metros al cuadrado"); } static double Area(int eleccion) {
switch (eleccion) { case 1: Console.WriteLine("Ha seleccionado cirulo!"); calcularAreaCirculo aCirculo = new calcularAreaCirculo(); Console.WriteLine("Digite el radio por favor: "); double radio = double.Parse(Console.ReadLine()); // Console.WriteLine($"El area es: {aCirculo.AreaCirculo(radio)} metros cuadrados"); return aCirculo.AreaCirculo(radio); case 2: Console.WriteLine("Has seleccionado Cuadrado!"); calcularAreaCuadrado aCuadrada = new calcularAreaCuadrado(); Console.Write("Digite el tamano de uno de los lados por favor: "); double lado = double.Parse(Console.ReadLine()); // Console.WriteLine($"El area es: {aCuadrada.AreaCuadrado(lado)} metros al cuadrado"); return aCuadrada.AreaCuadrado(lado); case 3: Console.WriteLine("Has seleccionado Rectangulo!"); calcularAreaRectangulo aRectangulo = new calcularAreaRectangulo(); Console.WriteLine("Digite el tamano de la base por favor: "); double baseRectangulo = double.Parse(Console.ReadLine()); Console.WriteLine("Digite el tamano de la altura por favor: "); double alturaRectangulo = double.Parse(Console.ReadLine()); // Console.WriteLine($"El area del rectangulo es: {aRectangulo.AreaRectangulo(baseRectangulo,alturaRectangulo)} metros al cuadrado"); return aRectangulo.AreaRectangulo(baseRectangulo, alturaRectangulo); case 4: Console.WriteLine("Has seleccionado Triangulo!"); calcularAreaTriangulo aTriangulo = new calcularAreaTriangulo(); Console.WriteLine("Digite el tamano de la base por favor: "); double baseTriangulo = double.Parse(Console.ReadLine()); Console.WriteLine("Digite el tamano de la altura por favor: "); double alturaTriangulo = double.Parse(Console.ReadLine()); return aTriangulo.AreaTriangulo(baseTriangulo, alturaTriangulo); default: throw new ArgumentOutOfRangeException();
} } } } class calcularAreaCirculo { private const double pi = 3.1416; public double AreaCirculo(double radio) { return pi * radio * radio; } } class calcularAreaCuadrado { public double AreaCuadrado(double lado) { return lado * lado; } } class calcularAreaRectangulo { public double AreaRectangulo(double LaBase, double LaAltura) { return LaBase * LaAltura; } } class calcularAreaTriangulo { public double AreaTriangulo(double LaBase, double LaAltura) { return (LaBase * LaAltura) / 2; } } }
11:27 ajaja es graciosos cómo entre europeos vacilan de la tecnología de sus vecinos, se parece mucho a los sudamericanos que algunas veces son "amigos" y después "rivales" pero no en tecnología sino en pendejadas 😂.
Muchas gracias por el video. Aprendo mucho con tu curso Tengo una duda con los constructores, en la sintaxis iría antes de los atributos o entre los atributos y los métodos?
Tengo una duda Juan... para trabajar con clases en C# se tienen que crear en "Program" asi como lo has estado haciendo, ó se pueden crear nuevos archivos con la clase que se va a utilizar e instanciarlos desde "Program". Saludos desde El Salvador. EDIT: no pasa nada, ya lo comprobe por mi mismo. Posdata: GRANDIOSO CURSO
Fantástico Juan. Una pregunta. Has trabajado mucho con C#? O lo estas descubriendo a medida que vas avanzando con el curso. De todas formas. Viendo que C# es muy versátil, es decir, veo que se usa mucho tanto para juegos (Unity), como para realizar softwares de plataforma. En tu opinión, en que aspectos C# tiene los puntos fuertes? Saludos Leopoldo.
Por regla o buena práctica se usa en minúscula, si te fijas cuando puso en mayúscula se pinta de otro color a diferencia de otros atributos. Quizá lo usa porque en su versión de VS le da igual, acepta sin problema.
Hay algo que no entendi, puedo tener otro constructor de Coche() pero que tenga otros valores sin que yo se los introduzca? o sea puedo crear un segundo cosntructor que se llame Coche2()?. Asi por ejemplo digamos que creo un juego de carreras donde existen 3 coches y cada uno tiene propiedades diferentes, puedo usar la clase Coche sin tener que otra clase de tipo coche? no se si se entiende mi pregunta.
hola profe, una pregunta ojala me la responda o alguien de los comentarios, por que usa el "S"tring y no el "s"tring por que me di cuenta que son validos los dos pero al ser case sensitive supongo que debe haber algo diferente, porfaaaaa si no no podre dormir con esa duda
Saludos Profesor, la pregunta que le voy hacer no se trata de este curso, si no de el de java, pero el tutorizado, quisiera saber cuando empieza y si por cada lección se realizan ejercicios para practicar, le agradezco su pronta respuesta
Todavia no me queda claro un cosa, en el anterior video con el ejemplo de la rueda se podia crear varios objetos de tipo rueda con un estado incial y sin constructor (me refiero a la propieda de PI que escribio) y en este usted dice que es necesario un constructor. No entiendo si es o no es necesario un contructor, agradeceria que me respondiera esta duda.
"Dar" en ingles no es "Get" "Dar" en inges es "Give" "Obtener" en ingles es "Get" Ya se que tu ya lo sabes Juan, y se que no te diste cuenta de ese fallo, tu te referias a que el programa nos "Da" esa informacion, y nosotros la "Obtenemos" (get) Solamente Aclarando eso. Saludos Juan, Exelentes videos
¡Hola, amigo Juan! Acabo de instalarme en mi viejo ordenador Dell Inspiron One 2305 ó 2350 Xamarin Studio y parece por el momento funcionar bien. ¿Es buena esa IDe?. Bueno, estuve practicando un poco: using System; namespace ObjetoCoche { class MainClass { public static void Main(string[] args) { Coche miCoche1 = new Coche(); Console.WriteLine(miCoche1.getDatos()); Console.WriteLine(miCoche1.getAsientos()); Coche miCoche2 = new Coche(); miCoche2.setAsientos("cuero"); Console.WriteLine(miCoche2.getDatos()); Console.WriteLine(miCoche2.getAsientos()); Console.ReadKey(); } } class Coche { private int ruedas; private double ancho; private double largo; private bool asientos_cuero; public Coche() { ruedas = 4; ancho = 3000.45; largo = 1000.44; asientos_cuero = false; } public String getDatos() { return "El coche tiene " + ruedas + " ruedas Con un ancho de " + ancho + " cm. Con un largo de " + largo + " cm."; } public void setAncho(double miAncho) { ancho = miAncho; } public void setLargo(double miLargo) { largo = miLargo; } public void setAsientos(string tipo) { if (String.Compare(tipo, "cuero", true) == 0) asientos_cuero = true; else asientos_cuero = false; } public String getAsientos() { if (asientos_cuero) return "Este coche poseé asientos de cuero"; else return "Este coche tiene asientos comunes"; } } }
¿Que pasaria si en lugar de sobrecargas, creó un solo constructor con condicionales, para dependiendo de los argumentos recibidos así me inicialice las variables? -¿Es des-recomendado? Considero que si lo hago así estaría ahorrando mucho código, por que podria utilizar argumentos, que obtengan un valor en dicho de no recibir uno. y trabajar con condicionales internas. por complejidad algorítmica tal vez sea útil. Si no es así te agradecería que por favor me aclares que me interesa mucho aprender y tú enseñas muy bien.
El problema está cuando quieres pasar un nº diferente de parámetros al constructor. Es decir, tú puedes crear condicionales dentro del constructor que evalúen el parámetro pasado pero ¿cómo lo haces si en ocasiones le quiero pasar al constructor 3 parámetros en otras 5, en otras 7 o 9....? ¿cómo controlas eso con condicionales dentro del constructor? ten en cuenta que no es lo mismo un objeto que no tiene por ejemplo la propiedad "nombre" que un objeto que tiene nombre =null (esto lo digo por si estabas pensando controlar con un condicional que si no te paso nada en el nombre lo dejas en null). Un saludo!
@@pildorasinformaticas Muchas gracias brother siempre das respuestas muy completas de verdad haces un excelente trabajo, por otro lado, entonces en este orden de ideas, lo ideal es dependiendo como voy a usar la clase. uso sobrecargas o uso condicionales, te mando un ejemplo de lo que yo hice public Coche(int tipo = 0) { switch (tipo) { case 1: ruedas = 1; largo = 2300.5; ancho = 0.800; break; case 2: ruedas = 3; largo = 3000.5; ancho = 5.800; climatizador = true; break; default: ruedas = 4; largo = 3000.5; ancho = 352.00; climatizador = true; tapiceria = "cuero"; break; } Para trabajar más que todo el tipo de coche, y el argumento es uno o 2 o 3 etc si voy agregando unos tienen climatizador y otros, lo tienen en null
@@danisabadia5606 Buena observacion, eso podria servir de alguna forma, cuando tenga que ser algo muy muy concreto, esa manera seria como hacer varios Constructores por Defecto. Pero cuando, como dice Juan, tengas que Asignar algun nombre por medio de los parametros, sera Imposible hacer, o podria ser posible con mas condicionales encimadas, pero ya seria mucho enrredo, aunque en serio buena observacion, esta muy util para hacer Varios Constructores por Defecto
Buenas tardes,tengo una duda... Si yo creo usando un poco el ejemplo que tu has usado con coches yo hago lo siguiente : Coche coche1 = new Coche(); Coche coche2 = coche1; coche1.Ruedas = 3;// el valor inicial en el constructor es 4. coche1 = null; Primero creo un coche1 luego digo a coche2 que apunte a coche1. Al cambiar el numero de ruedas de coche1 también se cambia a coche dos pero si yo pongo coche1 a null, coche2 sigue siendo coche1... No debería coche2 ser también null ? Es un poco feo el codigo que hago ahora pero es para ver el resultado. try { Console.WriteLine(coche1.GetHashCode()); Console.WriteLine(coche1.Ruedas); } catch (Exception e) { Console.WriteLine(e.Message); } try { Console.WriteLine(coche2.GetHashCode()); Console.WriteLine(coche2.Ruedas); } catch (Exception e) { Console.WriteLine(e.Message); } La salida en terminal es : Referencia a objeto no establecida como instancia de un objeto. 21083178 3 Un saludo.
Saludos profesor.
No nos abandone con los cursos de C#
Este video esta nominado a los premios OSCAR sin dudas...y gana el OSCAR de ORO.
El mejor profesor de cientos que he visto..
"A no ser que lo haya hecho un Ruso, que hacen cosas de estas"
Jajajajaja.
jaja cierto, soy ruso y nos gusta actuar de manera extraordinaria
Hay Vehiculos de 12, de 8, de 6 ruedas.
Soy ruso y me gustó su comentario xd
Eres un maestrazo.. claro, conciso, sin repetir y saltar lineas .. mil gracias
Ya había tomado esta lección en el curso de Java y pensé que mejor explicado no podía estar, y ahora veo este curso y mejora la explicación increíblemente, no cabe duda profe que a usted lo tenemos que proponerlo para algo estilo premio Nobel, es increíble su dedicación. Mil gracias
el primer profesor online que tuve con java, me acompaño por otros cursos y ahora C#, compartidisimo. saludos de Argentina!
Una clase muy, muy dura. Para mi, claro.
El mejor profesor, ojalá y termine el curso.
sublime este video, estoy en el penultimo semestre de la carrera y me salvo este curso.
Gracias a personas como tu que saben explicar y comparte sus conocimientos, Dios bendiga men .
Gracias por el curso, sos capisimo para explicar, hacen falta mas docentes como vos. Gracias
Esta es la mejor documentación orientada a objetos de UA-cam, muchas gracias, me has ayudado bastante.
agradezco terriblemente tu trabajo es lo mejor, tal vez viva en Venezuela y no pueda pagar ni un curso básico de algo de unos 20$ y tenga 14 años pero me encanta saber que gratuitamente hay personas como tu dando contenido de calidad dando una explicación a detalle sobre algún tema, gracias, gracias a ti aprendí php, sql y javascript y ahora c#
Vamos bro, y dime, ya completaste tu curso de c#, a que te dedicas ahora
@SoyFantasmita. Wepale. Buenas amigo, actualmente soy de 20 y bueno... Hace unos años que deje la programación, por raro que parezca, me dedico al boxeo tiempo completo y ya el año que viene debuto como profesional. La vida da muchas vueltas pero, eran buenos tiempos aquellos. 🙂
🤣🤣🤣🤣 un coche de 27 ruedas a no ser que lo haga un ruso. Mítico! 🙌🏼 El profesor Juan es el mejor.
Excelente video 👌, me vi otros videos q me dejaron en las mismas, este video fue extremadamente claro
Le tengo que poner pausa al vídeo porque ojala en mis días de estudio me hubiesen explicado con esta paciencia y detenimiento sobre los métodos Get y Set, solo le puedo decir muchas gracias, no todas las persona vienen con la habilidad de transmitir su conocimiento.
Entonces a lo que llama metodos de acceso son los metodos Get y Set??
Aaaaaaaaa por la cresta profe, me hizo el día, con este vídeo logré entender muchas cosas que no pude entender el primer año de programación. Muchísimas gracias por sus vídeos.
Saludos. Gracias por otro capitulo mas del curso. 👍
Muchísimas gracias. En mi aprendizaje de programación iba superrápido hasta que me topé con los constructores, los getters y los setters. De momento, lo tengo más claro, necesito ponerlo en práctica pero lo tengo más claro.
Excelente video, x fin comprendí qué es un constructor y para qué sirve. Muy clara la manera de explicar.
Además me voy con un adicional que es la sobrecarga de constructores, también me quedó absolutamente claro. Muchas gracias.
Que alegria estar en 2021 y no esperar por los videos son un crack!
Depronto para los que lo esten viendo escribiendo ctor y doble tab se puede crear el metodo constructor sin que marque error ya que a mi me pasaba. Buenos videos!!
QUE GRAN MAESTRO!
Marzo 2024: Estoy usando .NET 8 y se Visual Studio me ofrece otra forma más concisa de realizar los constructores. De todos modos la forma que nos muestras ayuda mucho a entender cuando nos enfrentemos a código de versiones anteriores. Tus explicaciones son muy claras. Gracias por tus enseñanzas 😄
Muchas gracias por los videos y el entusiasmo sos un gran profesor
hola papa estoy haciendo el curso tuyo de java . incrementando lo que se con lo tuyo . tamhien programo en c# es buenisima tu pedagogia . te felicito por seguir con esto
Antes escuchaba el nombre de Constructor y lo escuchaba muy intimidante jsjs. Gracias por el vídeo me ayudo bastante a entenderlos y como manejarlos!.
Excelente curso, ojala no lo deje de lado
Otro excelente video Profe, seguimos avanzando. Gracias !!!
Eres lo máximo Juan!!!
Si decides hacer un curso de pago seria el primero en inscribirme. Explicas MUY bien. Gracias.
Este Profesor es el mejor, bien explicado todo
Gracias desde Rep.Dom. Esperando con ansias la entrega de cada capítulo.
Hola Juan saludos desde Colombia .... mil gracias por el curso ...
Monumental el contenido del vídeo y aunque durara dos horas lo seguiría viendo. Agradecer por los vídeos que motivan a seguir aprendiendo programacion
No se si vas a explicarlo más adelante, pero por si las moscas C# tiene algo muy de mi agrado que es que cuando declaras una propiedad puedes definir los getters al mismo tiempo:
namespace ConsoleApllication1 {
class Coche {
private int ruedas { get; };
}
}
y si quieres getters y setters:
private int ruedas { get; set; }
te define el getter y el setter al mismo tiempo sin tener tu que crear un método especial.
Muy buena la explicación del video saludos desde México sigue así.
Al principio me pareció muy útil, pero luego he visto que existe el modificador readonly que hace básicamente lo mismo, solo que también parece estar en otros lenguajes y supongo que tendrá usos más generales. Supongo que más tarde enseñará readonly y por eso no ha comentado nada de esto.
Transparentes
Tambien estaba pensando lo mismo durante el video, a mi me excitan las propiedades asi se ahorra mucho codigo basura que en lenguajes como Java no se puede.
gracias por tomarte el tiempo para dar estos cursos, felicitaciones !!
Juan por favor, no te olvides de explicar en algún vídeo cómo podemos encarar documentación de lenguages de programación, librerías, etc. Eso de que nadie nace enseñado y que seguro que vosotros los experimentados sabéis cómo encarar sin que os enseñe nadie. Que a veces viene mal explicado. En el caso de librerías de jQuery por ejemplo venía mejor explicado dentro del JS de las propias librerías que en la documentación. Pues a eso me refiero. Esa experiencia de saber por dónde hilar para entender a veces lo inentendible. A mí me hace depender siempre de alguien que me explique. Y ya van como 4 lenguajes de programación que toco y que no termino porque me noto que no puedo ser independiente en aprendizaje por mi cuenta si necesito algo muy concreto. No sé, es complejo, como la propia informática.
No puedo ver 5 cursos diferentes por ejemplo por falta de tiempo. Sabiendo encarar ese aprendizaje por escrito, sería más rápido si necesito bootstrap, por ejemplo, vue.js, etc, etc, etc. A eso es a lo que voy.
Gracias por tus enseñanzas. He aprendido por fin la POO.
P.D.: Voy a ser muy pesado con esto. Me parece importante para todos.
Muchas gracias, me fue muy útil esta información.
En el minuto 7:23 la palabra reservada "new" no llama al constructor, sino que indica al compilador que debe crear un objeto de una clase determinada que se indica a continuación de new, para este ejemplo sería la clase Coche; quien llama al constructor es la instrucción "Coche()" que viene después de la palabra reservada "new", no es new en sí quien llama al constructor.
Felices fiestas y gracias por los cursos
Excelente explicación. Muchas gracias.
Aún no carga el video pero ya dejé mi like, veré este curso desde el inicio aunque yo ya sea algo experimentado, gracias master
Excelente como siempre
Amo tus videos Juan , "GET" es obtener, Dar es "Give" en el idioma Ingles.. saludos
Gracias por tus videos. Lo que no me gusta es esperar tanto por mas videos... Debo ya ir aprender en otro lado.
Me encanta tu curso. Llevo una semana y eh aprendido demasiado gracias.
Sigue así espero más contenido de ti :)
¡Estoy llevando el curso en 2023 y está increíble! Lo más valioso es que no solo se aprende la sintaxis sino los fundamentos y conceptos detrás de la misma. Muchísimas gracias.
Me gustaría hacer una consulta. ¿Cuál es la diferencia de escribir el tipo de las variables string con mayúsculas o minúsculas en la primera letra? He hecho la prueba y no veo ninguna diferencia al ejecutar código pero Visual Studio muestra un color de texto diferente cuando se escribe "string" que cuando se escribe "String". También se muestra un ícono distinto, según la palabra tenga mayúscula o minúscula inicial, cuando se despliega el menú de sugerencias de autocompletado.
En esta clase se explica mas o menos, pero basicamente se puede explicar que cuando hablamos de las cadenas de caracteres, no es un tipo de dato primitivo asi como int, double, float, etc, las cadenas de caracteres deben ir relacionadas con la clase String, por lo tanto lo que hacemos siempre es crear instancias de esa clase String, asi que se debe respetar el uso y el cómo crear instancias de dicha clase.
Muy bien explicado, gracias
Impecable!
30 Vídeos ya Píldoras Informáticas Gran Curso
Justo al final del video me preguntaba pro que en el video de circulo se llama al constructor (que no existe) ya entendí Mil gracias de nuevo y saludos.
Gracias por el nuevo capítulo, se echaba de menos.
Igual estoy metiéndome en camisa de once varas, pero VS tiene un generador de getters setters cuando se pulsa con botón derecho en una variable private. el código resultante se intuye pero me resulta un poco extraño. Por ejemplo si lo hacemos para la propiedad largo de la clase coche
private double largo;
se genera
public double Largo { get => largo; set => largo = value; }
es bastante intuitivo y está claro que esto nos permitirá acceder a la propiedad con el operador punto. Por ejemplo
Console.WriteLine( coche1.Largo);
no dará ningún error. Lo que no acabo de entender es la estructura, es decir, porque es coche1.Largo sin paréntesis y no coche1.Largo().
Por cierto creo que lo que no entiendo son las expresiones del tipo get=>largo; operador lambda me parece que se llaman, y me llevan loco desde la primera vez que las vi. Como imagino que aun no tocan este tipo de expresiones, mientras llega el momento ¿No sabrás de algún sitio donde empezar a hincarles el diente?
Gracias otra vez por aguantar a los coñazos que preguntamos cosas raras
hola papa porqie progranas en vs , mantenes software porqke ya no se usa mucho sino que todo se hace en c# es mas facil la sintaxis . la potencia es muy similar son lenguajes potentes y permiten un desarrollo rapido. lo de la sintaxis labda fijate en goglle sale todo
coche1.largo y NO coche1.largo() porque estamos invocando una propiedad y NO un método. Espero te sea de ayuda. No soy un experto.
qué bien que explica
Gracias por tu arte de enseñar. Me gustaria saber si puedes impartir un curso de delphi
te agradezco mucho lo que dijiste al final aunque lo hubieras dicho desde el principio por la instanciación me perdí mucho jajaj a
excelentes vídeos.
Yo tenía un profesor que me había dicho que los Getters/Setters que usaban particularmente la palabra get o set, como GetCantidadRuedas() simplemente retornaban o establecían valores, sin condiciones. Pero ahora que estoy llevando este curso me estoy dando cuenta que toda mi vida no he sabido entenderlo bien, ya que un set sin condicionales o evaluaciones sería lo mismo a poner un valor directo en la instancia, es decir, igual puedo poner ruedas negativas a ese coche si yo quiero. Entonces no le encuentro mucho sentido a lo que me habían enseñado. Ahora bien, por separación de responsabilidades pienso que mi profesor sí pudo tener razón, que exista una función con la palabra clave get o set solamente si es un valor que se modifica directamente sin importar nada y si hay un valor que requiere de procedimientos adicionales evaluativos llamarle de diferente forma, por ejemplo, EstablecerCantidadRuedas()
Muy buen video
gracias por tanto
@pildorasinformaticas Vaya hombre eres un crack. Tienes algún curso para unity? Así sea de pago? Me gusta como explicas las cosas. Tienes el don de enseñar.
Gracias Bro !
Todo un crack
Muy útil.
9:59 mi solucion:
crear un metodo public para acceder a la variable ruedas en la clase coche
public int VerRuedas()
{
return ruedas;
}
Aquí dejo mi pequeño programa con lo aprendido hasta ahora
Determina el área de un circulo, cuadrado, rectángulo o triangulo a decisión del usuario.
namespace Areas_de_figuras_geometricas__clases_metodos_
{
internal class Program /* Programa que permite calcular el area de ciertas figuras
geometricas sencillas, utilizando mis copnocimientos hasta ahora
(Switch, While, Do- While, Clases, Metodos, metodos anidados(?),
execpciones tanto try catch como throw. Se podria hacer mes sencillo por supuesto (thumbs up)*/
{ //PD: Faltaria el tema de constructores pero asi esta bien.
static void Main(string[] args)
{
Console.WriteLine("-------Seleccione la figura geometrica------");
Console.WriteLine("1.Circulo
2.Cuadrado
3.Rectangulo
4.Triangulo");
int eleccion;
eleccion = int.Parse(Console.ReadLine());
try {
Console.WriteLine($"El area del rectangulo es: {Area(eleccion)} metros al cuadrado");
} catch (ArgumentOutOfRangeException ex)
{
do
{
Console.WriteLine("Solo se pueden seleccionar esos 3");
Console.WriteLine("Digite su seleccion: ");
eleccion = int.Parse(Console.ReadLine());
} while (eleccion < 0 || eleccion > 4);
Console.WriteLine($"El area del rectangulo es: {Area(eleccion)} metros al cuadrado");
}
static double Area(int eleccion)
{
switch (eleccion)
{
case 1:
Console.WriteLine("Ha seleccionado cirulo!");
calcularAreaCirculo aCirculo = new calcularAreaCirculo();
Console.WriteLine("Digite el radio por favor: ");
double radio = double.Parse(Console.ReadLine());
// Console.WriteLine($"El area es: {aCirculo.AreaCirculo(radio)} metros cuadrados");
return aCirculo.AreaCirculo(radio);
case 2:
Console.WriteLine("Has seleccionado Cuadrado!");
calcularAreaCuadrado aCuadrada = new calcularAreaCuadrado();
Console.Write("Digite el tamano de uno de los lados por favor: ");
double lado = double.Parse(Console.ReadLine());
// Console.WriteLine($"El area es: {aCuadrada.AreaCuadrado(lado)} metros al cuadrado");
return aCuadrada.AreaCuadrado(lado);
case 3:
Console.WriteLine("Has seleccionado Rectangulo!");
calcularAreaRectangulo aRectangulo = new calcularAreaRectangulo();
Console.WriteLine("Digite el tamano de la base por favor: ");
double baseRectangulo = double.Parse(Console.ReadLine());
Console.WriteLine("Digite el tamano de la altura por favor: ");
double alturaRectangulo = double.Parse(Console.ReadLine());
// Console.WriteLine($"El area del rectangulo es: {aRectangulo.AreaRectangulo(baseRectangulo,alturaRectangulo)} metros al cuadrado");
return aRectangulo.AreaRectangulo(baseRectangulo, alturaRectangulo);
case 4:
Console.WriteLine("Has seleccionado Triangulo!");
calcularAreaTriangulo aTriangulo = new calcularAreaTriangulo();
Console.WriteLine("Digite el tamano de la base por favor: ");
double baseTriangulo = double.Parse(Console.ReadLine());
Console.WriteLine("Digite el tamano de la altura por favor: ");
double alturaTriangulo = double.Parse(Console.ReadLine());
return aTriangulo.AreaTriangulo(baseTriangulo, alturaTriangulo);
default: throw new ArgumentOutOfRangeException();
}
}
}
}
class calcularAreaCirculo
{
private const double pi = 3.1416;
public double AreaCirculo(double radio)
{
return pi * radio * radio;
}
}
class calcularAreaCuadrado
{
public double AreaCuadrado(double lado)
{
return lado * lado;
}
}
class calcularAreaRectangulo
{
public double AreaRectangulo(double LaBase, double LaAltura)
{
return LaBase * LaAltura;
}
}
class calcularAreaTriangulo
{
public double AreaTriangulo(double LaBase, double LaAltura)
{
return (LaBase * LaAltura) / 2;
}
}
}
11:27 ajaja es graciosos cómo entre europeos vacilan de la tecnología de sus vecinos, se parece mucho a los sudamericanos que algunas veces son "amigos" y después "rivales" pero no en tecnología sino en pendejadas 😂.
te amo loco
Maestro soy de los legendarios de Java, noto un tono de voz diferente, ajeejjejej.
Buena clase.
Muchas gracias :)
Gracias profesor, y un saludo para los rusos que también son europeos, bueno + o -.
Muchas gracias por el video. Aprendo mucho con tu curso
Tengo una duda con los constructores, en la sintaxis iría antes de los atributos o entre los atributos y los métodos?
Excelente eres el mejor.... ( •_•)>⌐■-■
Clases de Coches, un clásico.
Porque usas camelCase en los nombres de los metodos si justamente en el video anteior explicaste que los métodos publicos van en PascalCase. ??
Tengo una duda Juan... para trabajar con clases en C# se tienen que crear en "Program" asi como lo has estado haciendo, ó se pueden crear nuevos archivos con la clase que se va a utilizar e instanciarlos desde "Program". Saludos desde El Salvador.
EDIT: no pasa nada, ya lo comprobe por mi mismo. Posdata: GRANDIOSO CURSO
¿Puede explicar y dar un ejemplo sobre inyección de dependencias? Saludos.
13:43 No seria mejor simplemente declarar a las ruedas como una constante y listo?
Fantástico Juan. Una pregunta. Has trabajado mucho con C#? O lo estas descubriendo a medida que vas avanzando con el curso. De todas formas. Viendo que C# es muy versátil, es decir, veo que se usa mucho tanto para juegos (Unity), como para realizar softwares de plataforma. En tu opinión, en que aspectos C# tiene los puntos fuertes? Saludos Leopoldo.
Por que se utiliza "String" en mayúscula?
tengo la misma duda
Vale , está explicado más abajo, parece que da lo mismo escribirlo de una u otra manera. En este caso.
Por regla o buena práctica se usa en minúscula, si te fijas cuando puso en mayúscula se pinta de otro color a diferencia de otros atributos. Quizá lo usa porque en su versión de VS le da igual, acepta sin problema.
Dios mío, me duele la cabeza de tanta información 😭
Muy buen curso, profeo cuandi subir mas temas, saludos
Hay algo que no entendi, puedo tener otro constructor de Coche() pero que tenga otros valores sin que yo se los introduzca? o sea puedo crear un segundo cosntructor que se llame Coche2()?. Asi por ejemplo digamos que creo un juego de carreras donde existen 3 coches y cada uno tiene propiedades diferentes, puedo usar la clase Coche sin tener que otra clase de tipo coche? no se si se entiende mi pregunta.
hola profe, una pregunta ojala me la responda o alguien de los comentarios, por que usa el "S"tring y no el "s"tring por que me di cuenta que son validos los dos pero al ser case sensitive supongo que debe haber algo diferente, porfaaaaa si no no podre dormir con esa duda
hola profe si hay coches con mas de cuatro ruedas seria mas bien un tracto camión de 24 o 26 ruedas creo...?
Hola, excelente curso. Algun libro que recomienden para ir reforzando los conocimientos de este curso.
Maestro, he visto algunos codigos y tienen un constructor vacio y luego el constructor lleno, esto con que objetivo?
Saludos Profesor, la pregunta que le voy hacer no se trata de este curso, si no de el de java, pero el tutorizado, quisiera saber cuando empieza y si por cada lección se realizan ejercicios para practicar, le agradezco su pronta respuesta
Hay algun atajo para generar constructores por parametro? a veces se manejan muchos atributos en una clase y se hace tedioso escribirlo uno a uno
Y el constructor internal A() { } para que sirve ?
Todavia no me queda claro un cosa, en el anterior video con el ejemplo de la rueda se podia crear varios objetos de tipo rueda con un estado incial y sin constructor (me refiero a la propieda de PI que escribio) y en este usted dice que es necesario un constructor. No entiendo si es o no es necesario un contructor, agradeceria que me respondiera esta duda.
JUAN POR FAVOR ESCRIBE UN LIBRO DE C# Y TE LO COMPRAMOS
"Dar" en ingles no es "Get"
"Dar" en inges es "Give"
"Obtener" en ingles es "Get"
Ya se que tu ya lo sabes Juan, y se que no te diste cuenta de ese fallo, tu te referias a que el programa nos "Da" esa informacion, y nosotros la "Obtenemos" (get) Solamente Aclarando eso. Saludos Juan, Exelentes videos
¡Hola, amigo Juan!
Acabo de instalarme en mi viejo ordenador Dell Inspiron One 2305 ó 2350 Xamarin Studio y parece por el momento funcionar bien. ¿Es buena esa IDe?.
Bueno, estuve practicando un poco:
using System;
namespace ObjetoCoche
{
class MainClass
{
public static void Main(string[] args)
{
Coche miCoche1 = new Coche();
Console.WriteLine(miCoche1.getDatos());
Console.WriteLine(miCoche1.getAsientos());
Coche miCoche2 = new Coche();
miCoche2.setAsientos("cuero");
Console.WriteLine(miCoche2.getDatos());
Console.WriteLine(miCoche2.getAsientos());
Console.ReadKey();
}
}
class Coche
{
private int ruedas;
private double ancho;
private double largo;
private bool asientos_cuero;
public Coche()
{
ruedas = 4;
ancho = 3000.45;
largo = 1000.44;
asientos_cuero = false;
}
public String getDatos()
{
return "El coche tiene " + ruedas + " ruedas
Con un ancho de " + ancho + " cm.
Con un largo de " + largo + " cm.";
}
public void setAncho(double miAncho)
{
ancho = miAncho;
}
public void setLargo(double miLargo)
{
largo = miLargo;
}
public void setAsientos(string tipo)
{
if (String.Compare(tipo, "cuero", true) == 0) asientos_cuero = true;
else asientos_cuero = false;
}
public String getAsientos()
{
if (asientos_cuero) return "Este coche poseé asientos de cuero";
else return "Este coche tiene asientos comunes";
}
}
}
Hay algo que no entiendo muy bien: si mi clase tiene por ejemplo 4 propiedades, cuantos constructores debo crear?
¿Que pasaria si en lugar de sobrecargas, creó un solo constructor con condicionales, para dependiendo de los argumentos recibidos así me inicialice las variables?
-¿Es des-recomendado?
Considero que si lo hago así estaría ahorrando mucho código, por que podria utilizar argumentos, que obtengan un valor en dicho de no recibir uno. y trabajar con condicionales internas. por complejidad algorítmica tal vez sea útil. Si no es así te agradecería que por favor me aclares que me interesa mucho aprender y tú enseñas muy bien.
El problema está cuando quieres pasar un nº diferente de parámetros al constructor. Es decir, tú puedes crear condicionales dentro del constructor que evalúen el parámetro pasado pero ¿cómo lo haces si en ocasiones le quiero pasar al constructor 3 parámetros en otras 5, en otras 7 o 9....? ¿cómo controlas eso con condicionales dentro del constructor? ten en cuenta que no es lo mismo un objeto que no tiene por ejemplo la propiedad "nombre" que un objeto que tiene nombre =null (esto lo digo por si estabas pensando controlar con un condicional que si no te paso nada en el nombre lo dejas en null). Un saludo!
@@pildorasinformaticas Muchas gracias brother siempre das respuestas muy completas de verdad haces un excelente trabajo, por otro lado, entonces en este orden de ideas, lo ideal es dependiendo como voy a usar la clase. uso sobrecargas o uso condicionales, te mando un ejemplo de lo que yo hice
public Coche(int tipo = 0)
{
switch (tipo)
{
case 1:
ruedas = 1;
largo = 2300.5;
ancho = 0.800;
break;
case 2:
ruedas = 3;
largo = 3000.5;
ancho = 5.800;
climatizador = true;
break;
default:
ruedas = 4;
largo = 3000.5;
ancho = 352.00;
climatizador = true;
tapiceria = "cuero";
break;
}
Para trabajar más que todo el tipo de coche, y el argumento es uno o 2 o 3 etc si voy agregando unos tienen climatizador y otros, lo tienen en null
Men no se para donde se me fue el resto del texto, jeje pero lo que decía que lo ideal seria dependiendo de qué usos le voy a dar a esa clase
@@danisabadia5606 Buena observacion, eso podria servir de alguna forma, cuando tenga que ser algo muy muy concreto, esa manera seria como hacer varios Constructores por Defecto. Pero cuando, como dice Juan, tengas que Asignar algun nombre por medio de los parametros, sera Imposible hacer, o podria ser posible con mas condicionales encimadas, pero ya seria mucho enrredo, aunque en serio buena observacion, esta muy util para hacer Varios Constructores por Defecto
creo que ya sabemos que los dias de las universidades estan contados
Holas, alguien haciendo el curso en 12/2020 ?
Buenas tardes,tengo una duda...
Si yo creo usando un poco el ejemplo que tu has usado con coches yo hago lo siguiente :
Coche coche1 = new Coche();
Coche coche2 = coche1;
coche1.Ruedas = 3;// el valor inicial en el constructor es 4.
coche1 = null;
Primero creo un coche1 luego digo a coche2 que apunte a coche1.
Al cambiar el numero de ruedas de coche1 también se cambia a coche dos pero si yo pongo coche1 a null, coche2 sigue siendo coche1...
No debería coche2 ser también null ?
Es un poco feo el codigo que hago ahora pero es para ver el resultado.
try
{
Console.WriteLine(coche1.GetHashCode());
Console.WriteLine(coche1.Ruedas);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
try
{
Console.WriteLine(coche2.GetHashCode());
Console.WriteLine(coche2.Ruedas);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
La salida en terminal es :
Referencia a objeto no establecida como instancia de un objeto.
21083178
3
Un saludo.
Me parece que eso es por el Flujo de Ejecucion, si era eso? me supongo que ya lo resolviste
Y declaras esta vez String como clase, no string como primitivo. ¿Qué diferencia hay en usar el tipo string y la clase String?
string es el alias de String, da el mismo resultado. De todas maneras, por convención siempre se recomienda usar los alias.