Si se decide usar un truco asi es muy importante tener tu codigo muy bien documentado y estructurado, porque resulta poco intuitivo para tus colabradores, sobretodo para ti mismo cuando revisites el codigo, pero un trucazo sin duda!
Muy bueno, esto si que no lo conocia, y mientras veia el video pensaba cuantos dolores de cabeza me hubiese ahorra, ahora solo queda implementarlo cuando llegue el caso
fuaaa sos un groso, gracias por compartir tus conocimientos. En la facu nos explicaron sobrecarga de operadores con C++ pero no le veia un uso, ahora si. Saludos desde Argentina.
¡Qué buena idea! Es un buen uso práctico a la sobrecarga de operadores. En proyectos grandes y profesionales he usado Automapper, pero en proyectos chicos suelo implementar métodos estáticos para no depender de otra librería. El único problema que le encuentro a esta solución es de acoplamiento en un proyecto multicapa, cuando la clase de origen tiene que conocer a la clase destino. Ej Beer > BeerDTO o BeerView. La solución sería que la clase destino sea la encargada de conocer y mapear a la clase origen.
A mí me gusta usar extensions para esto, a los DTO por ejemplo les creo métodos ToModel y a los models les creo métodos ToDTO. Creo que incluso he hecho algunas cosillas genéricas con Reflection para esto, pero el resto del equipo suele opinar que es "muy complicado"
Nesecito un hdelon pero para javascript me encanta que aborde temas tan profundos en 10 min
Рік тому
Uno de esos temas en los que tengo conflictos por la legibilidad del código y porque puede generar confusión y obscuridad de código cuando no te das cuenta de si el operador está sobrecargado. Por otro lado, tener que estar sobrecargando para cada mapeo dentro de clase origen resulta engorroso (en Automapper por ejemplo puedes tener todos tus mapeos en un solo archivo, es más fácil de mantener cuando tienes cientos de mapeos). Pero es válido para cosas pequeñas o que no van a crecer exageradamente. Muy buen topic master!
Un muy buen tips. Si no me equivoco C# maneja conversión de tipo por medio de conversión implícita, la cual se define como el mismo tipo de operadores. De esta forma también nos podemos saltar el uso de un mapper. Ejemplo: public static explicit operator Profesor(Alumno alum) { return new Profesor { Name = alum.Name, Facultad = alum.Facultad, IdContrato = -1 }; } //Lo mismo para alumno Profesor teacher = new Profesor { Name = "Jorge", Facultad = "Ingenieros", IdContrato = 10 }; Alumno student = (Alumno)teacher; Profesor teacher2 = (Profesor)student; Saludos!
Me ganaste el comentario .. Siiiiiiiiii ... eso lo uso mucho, ya cada día lo he vuelto un ammmm una practica común en mi... Ayuda mucho sobre todo si tienes no solo MUCHOS atributos, si no si estos a su vez, tienen subObjetos .. por ejemplo que Profesor y Alumno tengan Domicilio ... y adentro hay que copiar tmb el domicilio ... Yo hago un truco para mas rápido ... quizas sea mala práctica, no se ... pero con la ayuda de JSON Converter (ya sea Newtonsoft o en NET con System.Text.Json) ... me llega el objeto, lo Serializo (a STRING) y lo Deserealizo (a Objeto) del otro tipo de clase (a Alumno). Ésto para que si agrego un nuevo atributo en alguna parte de las clases, no tengo que ir al Convertidor Implicito a tomarlo en cuennta... Con NewtonSoft quedaría algo como así: (cambiar a System.Text.Json en caso de Net 5 o posterior) // Convertir de Alumno a Profesor => profe = alumno; public static explicit operator Profesor(Alumno alum) { return Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(alum)); } // Convertir de Profesor a Alumno => alumno = profe; public static explicit operator Alumno(Profesor profe) { return Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(profe)); }
Aunque por otro lado... SOLO APLICA si ... los atributos son públicos y se llaman igual ... Si algun campo se llama distinto, ya valió "mi proceso" ... por que ... si el objeto Profesor tiene campo SALARIO y el campo alumno tiene el campo DONACION .. alli si el parsear con JSON no funcionará .. toca hacer manual ese paso (o esos si son varios) ... pero bueno, quizas a alguien le ayude un poco lo que propongo jejejejeje
Gran video. Disculpa que beneficios o diferencias tendría esta forma de trabajar contra por ejemplo una función que reciba el objeto como parámetro y haga esas mismas asignaciones?
Hola!! saludos desde Chile. Llevo años programando en C# y no lo conocía :S supongo que se dejó de usar debido a que puedes crear métodos dentro de la clase que hagan ese mapeo. ¿Cual será mejor usar?? (en mi caso particular los mapeos los hago en otra clase aparte y los paso por sobrecarga. example Product toProduct (this beer));
Excelente Video Hector!!. Tengo una pregunta, no se podría reemplazar el primer argumento de los params que recibe la sobrecarga del operador por un this? (asumiendo el primer parámetro es el mismo objeto instanciado). Muchas gracias y un abrazo grande!!!
Hola tocayo tengo una consulta. Sabes si desde un sistema de escritorio en c# se podrá comunicar con la cámara de mi celular? Quisiera proponer eso donde trabajo pero tengo la duda si es que se puede realizar o no, busque información pero no encuentro algo estable y fijo para q me deje esa comunicación.
Amigo Héctor cómo vas, disculpa tal vez me puedes direccionar, tengo algunos curso tuyos, pero me encuentro en un dilema, cuando género el menú dinámico al momento de dar clic en una opción por detrás quiero que se genere u hash y pasar como parámetro, capturar y comparar el la session que fue almacenada. Estoy trabajando con web forms, agradezco tu apoyo.
Hola que tal, se que esto no por parte de este video pero ya no se donde buscar. Lo que pasa es que al momento de programar, en el archivo cshtml, al momento de abrir cualquier etiqueta se me duplican los caracteres ejemplo: "
En realidad es al revés. NET Framework es el que está obsoleto y Microsoft ya no sacará más versiones. De acá en adelante todo será solo Core (en realidad se llamará .NET a secas, más el número de versión obviamente).
Public Function BUSCARX(valor_Buscado, matriz_Buscada As Range, matriz_Devuelta As Range) For Each elemento In matriz_Buscada If elemento = valor_Buscado Then BUSCARX = matriz_Devuelta.Item(elemento.Row - matriz_Buscada(1, 1).Row + 1) Exit For Else BUSCARX = "No encontrado" End If End Function
me sale el error for sin next , este es un codigo ya que mi excel no tiene la funcion buscar y la necesito, gracias desde ya, me suscribiré un abrazo hermano
Mis cursos de Programación: hdeleon.net/cursos-premium/
Si se decide usar un truco asi es muy importante tener tu codigo muy bien documentado y estructurado, porque resulta poco intuitivo para tus colabradores, sobretodo para ti mismo cuando revisites el codigo, pero un trucazo sin duda!
Muy bueno, esto si que no lo conocia, y mientras veia el video pensaba cuantos dolores de cabeza me hubiese ahorra, ahora solo queda implementarlo cuando llegue el caso
Excelente, yo he usado sobre carga de operadores para cambiar el comportamiento de los operadores nativos
No puede ser mas borracho Hector...😁, Muy interesante el auto mapper nativo c#
Muchas gracias! No conocía la sobrecarga de operadores en C# ni en ningún otro lenguaje! 😃👏👏👏
fuaaa sos un groso, gracias por compartir tus conocimientos. En la facu nos explicaron sobrecarga de operadores con C++ pero no le veia un uso, ahora si.
Saludos desde Argentina.
¡Qué buena idea! Es un buen uso práctico a la sobrecarga de operadores. En proyectos grandes y profesionales he usado Automapper, pero en proyectos chicos suelo implementar métodos estáticos para no depender de otra librería.
El único problema que le encuentro a esta solución es de acoplamiento en un proyecto multicapa, cuando la clase de origen tiene que conocer a la clase destino. Ej Beer > BeerDTO o BeerView.
La solución sería que la clase destino sea la encargada de conocer y mapear a la clase origen.
Interfaces
Buena, Héctor! Arriba compra ✌✌
Un saludo!
A mí me gusta usar extensions para esto, a los DTO por ejemplo les creo métodos ToModel y a los models les creo métodos ToDTO. Creo que incluso he hecho algunas cosillas genéricas con Reflection para esto, pero el resto del equipo suele opinar que es "muy complicado"
Nesecito un hdelon pero para javascript me encanta que aborde temas tan profundos en 10 min
Uno de esos temas en los que tengo conflictos por la legibilidad del código y porque puede generar confusión y obscuridad de código cuando no te das cuenta de si el operador está sobrecargado. Por otro lado, tener que estar sobrecargando para cada mapeo dentro de clase origen resulta engorroso (en Automapper por ejemplo puedes tener todos tus mapeos en un solo archivo, es más fácil de mantener cuando tienes cientos de mapeos). Pero es válido para cosas pequeñas o que no van a crecer exageradamente. Muy buen topic master!
Un muy buen tips.
Si no me equivoco C# maneja conversión de tipo por medio de conversión implícita, la cual se define como el mismo tipo de operadores. De esta forma también nos podemos saltar el uso de un mapper.
Ejemplo:
public static explicit operator Profesor(Alumno alum)
{
return new Profesor { Name = alum.Name, Facultad = alum.Facultad, IdContrato = -1 };
}
//Lo mismo para alumno
Profesor teacher = new Profesor { Name = "Jorge", Facultad = "Ingenieros", IdContrato = 10 };
Alumno student = (Alumno)teacher;
Profesor teacher2 = (Profesor)student;
Saludos!
Me ganaste el comentario .. Siiiiiiiiii ... eso lo uso mucho, ya cada día lo he vuelto un ammmm una practica común en mi... Ayuda mucho sobre todo si tienes no solo MUCHOS atributos, si no si estos a su vez, tienen subObjetos .. por ejemplo que Profesor y Alumno tengan Domicilio ... y adentro hay que copiar tmb el domicilio ...
Yo hago un truco para mas rápido ... quizas sea mala práctica, no se ... pero con la ayuda de JSON Converter (ya sea Newtonsoft o en NET con System.Text.Json) ... me llega el objeto, lo Serializo (a STRING) y lo Deserealizo (a Objeto) del otro tipo de clase (a Alumno). Ésto para que si agrego un nuevo atributo en alguna parte de las clases, no tengo que ir al Convertidor Implicito a tomarlo en cuennta...
Con NewtonSoft quedaría algo como así: (cambiar a System.Text.Json en caso de Net 5 o posterior)
// Convertir de Alumno a Profesor => profe = alumno;
public static explicit operator Profesor(Alumno alum) {
return Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(alum));
}
// Convertir de Profesor a Alumno => alumno = profe;
public static explicit operator Alumno(Profesor profe) {
return Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(profe));
}
Aunque por otro lado... SOLO APLICA si ... los atributos son públicos y se llaman igual ... Si algun campo se llama distinto, ya valió "mi proceso" ... por que ... si el objeto Profesor tiene campo SALARIO y el campo alumno tiene el campo DONACION .. alli si el parsear con JSON no funcionará .. toca hacer manual ese paso (o esos si son varios) ... pero bueno, quizas a alguien le ayude un poco lo que propongo jejejejeje
No lo sabia cabezón gracias!
Excelente aporte 🖥 saludos hector desde Nicaragua
¡Lo que necesitaba!!! Gracias Héctor.
Si aprendi algo nuevo gracias, Saludos
Cara sou teu fã!!!
Hail from brasil
Gran consejo, gracias.
Aprendí algo nuevo. Gracias Hector 🤟
Genial 👍
Chingonsisimo
Excelente!!!
Crack!
Siempre se aprende con sus métodos, muchas gracias
Excelente aportación amigo
Otro gran video sobre programación.
Excelente como siempre
No se que es mas brillante, Hector o su cabello
excelente explicación
Muy bueno
Muy buen contenido Hector 🤘
excelentes consejos como siempre, muchas gracias
Gran video. Disculpa que beneficios o diferencias tendría esta forma de trabajar contra por ejemplo una función que reciba el objeto como parámetro y haga esas mismas asignaciones?
Hola!! saludos desde Chile. Llevo años programando en C# y no lo conocía :S supongo que se dejó de usar debido a que puedes crear métodos dentro de la clase que hagan ese mapeo. ¿Cual será mejor usar?? (en mi caso particular los mapeos los hago en otra clase aparte y los paso por sobrecarga. example Product toProduct (this beer));
Chulada
Execelente
Excelente Video Hector!!. Tengo una pregunta, no se podría reemplazar el primer argumento de los params que recibe la sobrecarga del operador por un this? (asumiendo el primer parámetro es el mismo objeto instanciado). Muchas gracias y un abrazo grande!!!
No lo he probado, pero supongo que creando una propiedad List dentro de un objeto se podría ir añadiendo ese parámetro, lo probaré...
Yo estuve haciendo eso pero lo llamaba de otra manera (convertidor) no como se llama técnicamente, sobrecarga de operadores 😅
esta rotisimo XD
Hola tocayo tengo una consulta.
Sabes si desde un sistema de escritorio en c# se podrá comunicar con la cámara de mi celular? Quisiera proponer eso donde trabajo pero tengo la duda si es que se puede realizar o no, busque información pero no encuentro algo estable y fijo para q me deje esa comunicación.
No es heavy metal! pero es dark, dark! xD
gracias
Muchas gracias Héctor. Desde qué versión se puede usar?
Desde hace años, no recuerdo cual, pero 10 años fácil
Amigo Héctor cómo vas, disculpa tal vez me puedes direccionar, tengo algunos curso tuyos, pero me encuentro en un dilema, cuando género el menú dinámico al momento de dar clic en una opción por detrás quiero que se genere u hash y pasar como parámetro, capturar y comparar el la session que fue almacenada. Estoy trabajando con web forms, agradezco tu apoyo.
Como migro un proyecto net core 3.1 al 7?
Buen dato perturbador (Y)
Yeahh esta interesante... pero en una lista de objetos ¿se tendría que meter en un ciclo para ir haciendo la "traducción" uno por uno?
aquí: ua-cam.com/video/xoYiBLggBq8/v-deo.html
Sobrecarga de operadores
Hola que tal, se que esto no por parte de este video pero ya no se donde buscar. Lo que pasa es que al momento de programar, en el archivo cshtml, al momento de abrir cualquier etiqueta se me duplican los caracteres ejemplo: "
una pregunta... .net core es relativamente obsoleto comparado con .net framework? o simplemente son distintas formas de hacer lo mismo?
.NET core es mas actualizado
En realidad es al revés. NET Framework es el que está obsoleto y Microsoft ya no sacará más versiones. De acá en adelante todo será solo Core (en realidad se llamará .NET a secas, más el número de versión obviamente).
Public Function BUSCARX(valor_Buscado, matriz_Buscada As Range, matriz_Devuelta As Range)
For Each elemento In matriz_Buscada
If elemento = valor_Buscado Then
BUSCARX = matriz_Devuelta.Item(elemento.Row - matriz_Buscada(1, 1).Row + 1)
Exit For
Else
BUSCARX = "No encontrado"
End If
End Function
me sale el error for sin next , este es un codigo ya que mi excel no tiene la funcion buscar y la necesito, gracias desde ya, me suscribiré un abrazo hermano