elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Diferencias de metodos y dudas C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diferencias de metodos y dudas C#  (Leído 3,032 veces)
pax01

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Diferencias de metodos y dudas C#
« en: 14 Noviembre 2017, 14:28 pm »

Hola nuevamente,

Estoy haciendo algunos ejercicios que encontré por GitHub y me he topado con varios inconvenientes, son ejercicios bastante completos. Me gustaría que me guíen con algunas definiciones y conceptos que los tengo volando.

Tres puntos del ejercicio que no se para donde disparar:

* Realizar un método de instancia llamado ―AgregarImpuestos”, que
recibirá un doble por parámetro y que se sumará al precio del
objeto.

Código:
void AgregarImpuesto(double impuesto){
Operaciones
}

¿Eso es un método de instancia? (Es decir sin el static ?)


* Realizar un método de clase llamado “MostrarAuto”, que recibirá un
objeto de tipo “Auto” por parámetro y que mostrará todos los
atributos de dicho objeto.
Código:
public void MostrarAuto(Auto auto){
Codigo
}

Es esto un método de clase ? (Que diferencias hay entre un metodo de clase y de instancia ? Tiene que ver con el static y con el modificar de acceso a tal metodo (public, priv, ext, int, prot)?)


* Sobrecargar su constructor para poder instanciar objetos
pasándole como parámetros:
i. La marca y el color (primera sobrecarga)
ii. La marca, color y el precio (segunda sobrecarga).
iii. Y tres sobrecargas más, de las cuales dos deben tener como
parámetro la fecha.

Este punto no se ni por donde arrancarlo. Instanciar objetos sería "crear objetos" por lo que tengo entendido, pasandoselo como parámetros al constructor pero lo que no me queda claro es la parte de Sobrecargar su constructor, como modifico la sobrecarga a medida que corre el programa. Si me pueden dar una explicacion/tip/codigo para entender el funcionamiento de la sobrecarga del constructor sería excelente.

Gracias por el espacio.

Saludos!

PD: Si logro hacer el ejercicio entero les dejo el código para todos.


En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.810



Ver Perfil
Re: Diferencias de metodos y dudas C#
« Respuesta #1 en: 15 Noviembre 2017, 14:36 pm »

Código:
void AgregarImpuesto(double impuesto){
Operaciones
}

¿Eso es un método de instancia? (Es decir sin el static ?)

Sí.



* Realizar un método de clase llamado “MostrarAuto”, que recibirá un
objeto de tipo “Auto” por parámetro y que mostrará todos los
atributos de dicho objeto.
Código:
public void MostrarAuto(Auto auto){
Codigo
}

Es esto un método de clase ?

Que diferencias hay entre un metodo de clase y de instancia ?

En mi opinión no deberías estudiar en Español ni leer tutoriales/ejercicios en Español, solo vas a conseguir acabar aprendiendo y acostumbrarte a un vocabulario tecnicista incorrecto que a la larga te va a confundir y te va a limitar en la comprensión del tecnicismo en el Idioma nativo y también el más extendido en el ámbito de la programación: el Inglés. El término "Método de clase" se podria interpretar de varias manera, como método estático, o por otro lado método de acceso privado que solo se pueda acceder a nivel de clase... asumiré que tú y el ejercicio se están refiriendo a métodos estáticos y no estáticos (o de instancia).

Respondiendo a la primera pregunta: eso que escribiste es un método de instancia. Si querías hacer hacer un método estático o "de clase" pues... a ese método le falta que le añadas el modificador static.

Respondiendo a la segunda pregunta: un método de instancia necesita una instancia del tipo (clase, estructura) en el que fue declarado dicho método, y un método estático es un método que se puede llamar sin crear de forma explícita una instancia del tipo en el que fue declarado dicho método.

Pondré un ejemplo. Aquí tenemos una clase con ambos tipos de métodos:

Código
  1. public class Class1 {
  2.  
  3.        public Class1() { }
  4.  
  5. public static void StaticMethod() {
  6. Console.WriteLine("I'm a static method.");
  7. }
  8.  
  9. public void NonStaticMethod() {
  10. Console.WriteLine("I'm not a static method.");
  11. }
  12.  
  13. }

Para poder llamar al método estático, lo harías de la siguienta manera, escribiendo el nombre de la clase donde se expone el miembro estático:
Código
  1. Class1.StaticMethod();

Para poder llamar al método no estático o de instancia, primero necesitarías crear una instancia de la clase Class1 y entonces es cuando puedes llamar al método a través de la referencia del objeto:
Código
  1. Class1 obj = new Class1();
  2. obj.NonStaticMethod();



Tiene que ver con el static y con el modificar de acceso a tal metodo (public, priv, ext, int, prot)?)

Los modificadores de acceso como public, private, protected o internal no tienen que ver con el modificador static, son un tema aparte, los modificadores de acceso determinan que el miembro sea accesible a nivel de clase, de clase heredada, o de ensamblado. Los modificadores de acceso son combinables con el modificador "static". Por poner un ejemplo: un método puede ser estático y de acceso privado al mismo tiempo.



* Sobrecargar su constructor para poder instanciar objetos pasándole como parámetros:
i. La marca y el color (primera sobrecarga)
ii. La marca, color y el precio (segunda sobrecarga).
iii. Y tres sobrecargas más, de las cuales dos deben tener como parámetro la fecha.

Este punto no se ni por donde arrancarlo. Instanciar objetos sería "crear objetos" por lo que tengo entendido, pasandoselo como parámetros al constructor pero lo que no me queda claro es la parte de Sobrecargar su constructor, como modifico la sobrecarga a medida que corre el programa. Si me pueden dar una explicacion/tip/codigo para entender el funcionamiento de la sobrecarga del constructor sería excelente.

Está mal explicado eso de "un constructor para poder instanciar objetos", deja mucho margen a la libre interpretación. Yo no seguiría leyendo esos ejercicios en Español, ya te di mi consejo.

Las sobrecargas no se modifican o añaden en tiempo de ejecución, se declaran en tiempo de diseño. Un ejemplo de sobrecargas para un constructor de clase:

Código
  1. public sealed class Producto {
  2.  
  3. public string Nombre { get; set; }
  4. public string Marca { get; set; }
  5. public Color Color { get; set; }
  6. public double Precio { get; set; }
  7. public DateTime Fecha { get; set; }
  8.  
  9. public Producto() :
  10.    this(string.Empty, string.Empty, Color.Empty, new double(), new DateTime()) {}
  11.  
  12. public Producto(string nombre) :
  13.    this(nombre, string.Empty, Color.Empty, new double(), new DateTime()) {}
  14.  
  15. public Producto(string nombre, string marca) :
  16.    this(nombre, marca, Color.Empty, new double(), new DateTime()) {}
  17.  
  18. public Producto(string nombre, string marca, Color color) :
  19.    this(nombre, marca, color, new double(), new DateTime()) {}
  20.  
  21. public Producto(string nombre, string marca, Color color, double precio) :
  22.    this(nombre, marca, color, precio, new DateTime()) {}
  23.  
  24. public Producto(string nombre, string marca, Color color, double precio, DateTime fecha) {
  25.    this.Nombre = nombre;
  26.    this.Marca = marca;
  27.    this.Color = color;
  28.    this.Precio = precio;
  29.    this.Fecha = fecha;
  30. }
  31.  
  32. }

Por lo general, la finalidad de añadir sobrecargas (a cualquier tipo de miembro sobrecargable) es que las sobrecargas se limiten a adaptar (que no evaluar) los argumentos pasados a dicha sobrecarga para enviárselos a otra sobrecarga, la "principal", que es la que desempeñará el trabajo de verdad (y evaluará los argumentos pasados por la sobrecarga). Lo que puedes ver en el código de ejemplo que puse arriba, vaya, sería un ejemplo muy reducido. Hacer lo contrario se consideraría mal hábito de programación, tener sobrecargas y que cada una de ellas haga cosas diferentes dentro de cada bloque del método de la sobrecarga podría resultar en un código espagueti...

Saludos.


« Última modificación: 15 Noviembre 2017, 16:47 pm por Eleкtro » En línea

pax01

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Re: Diferencias de metodos y dudas C#
« Respuesta #2 en: 15 Noviembre 2017, 15:48 pm »

Mil gracias por la explicación.

Nada más que agregar, impecable :)

Voy a seguir tu consejo!

Un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
sobrecarga de metodos, se puede aplicar en metodos abstract o interfaces?
Desarrollo Web
jhonatanAsm 0 2,946 Último mensaje 16 Agosto 2011, 00:22 am
por jhonatanAsm
WPF/windows form/C#.net diferencias y dudas generales « 1 2 »
.NET (C#, VB.NET, ASP)
markitus90 10 10,700 Último mensaje 4 Marzo 2016, 08:15 am
por Meta
Api Web y métodos GET
Desarrollo Web
Zeros1001 4 2,349 Último mensaje 9 Septiembre 2016, 00:52 am
por Neocortex
Dudas acerca Web Hostings y Metodos de Pago [Ayuda]
Dudas Generales
BabaNK 0 1,688 Último mensaje 27 Febrero 2017, 18:34 pm
por BabaNK
Dudas en metodos
Java
n-utz 1 1,534 Último mensaje 2 Abril 2017, 01:49 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines