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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [C#] Heredar constructores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C#] Heredar constructores  (Leído 11,458 veces)
Siuto
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
[C#] Heredar constructores
« en: 25 Septiembre 2010, 01:49 am »

Quiero hacer algo que no se si se puede, a ver si me dice alguien...


Código
  1. class Padre
  2. {
  3.    public Padre(String cadena)
  4.    {
  5.        // ... Explota si la cadena llega con alguna mayuscula
  6.    }
  7. }
  8.  
  9. class Hijo : Padre
  10. {
  11.    public Hijo(String cadena) : base(cadena)
  12.    {
  13.        cadena = cadena.ToLower();
  14.    }
  15. }


¿Como debo hacer para pasar la cadena en minuscula a la clase padre? porque haciendolo de esa forma no sirve de nada ya que primero se llama al constructor de la clase Padre y despues se pasa a minuscula la cadena.

La clase que llamo padre en este ejemplo es una clase de .NET en mi caso por lo que no puedo modificarla.


En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [C#] Heredar constructores
« Respuesta #1 en: 25 Septiembre 2010, 02:08 am »

Hola,

A ver, la clase Hijo no puede aceptar la cadena en mayúscula, pues la pasas a minúsculas al momento de pasarsela al constructor:
Código
  1.    class Hijo : Padre
  2.    {
  3.        public Hijo(String cadena)
  4.            : base(cadena.ToLower())
  5.        {
  6.  
  7.        }
  8.    }
  9.  

Un saludo!

PD: Eso debe funcionar x)


En línea

BETA_V

Desconectado Desconectado

Mensajes: 131


HC


Ver Perfil
Re: [C#] Heredar constructores
« Respuesta #2 en: 25 Septiembre 2010, 02:09 am »

de esta manera
Código
  1. public Hijo(string cadena): base(cadena.ToLower())
  2.  
En línea

Siuto
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
Re: [C#] Heredar constructores
« Respuesta #3 en: 28 Septiembre 2010, 02:40 am »

Es una linda solucion es pero no me sirve porque en relidad estoy haciendo la verificacion de mas de un parametro y lo que verfico en unos depende de lo que hay en los otros, algo asi:


Código
  1. class Padre
  2. {
  3.    public Padre(String c1, String c2)
  4.    {
  5.        // ... Explota si la cadena llega con alguna mayuscula
  6.    }
  7. }
  8.  
  9. class Hijo : Padre
  10. {
  11.    public Hijo(String c1, String c2) : base(c1, c2)
  12.    {        
  13.        if (c1.length > c2.Length) c1 = c1.ToLower();
  14.        else c2 = c2.ToLower();
  15.    }
  16. }


No se si ahora quedo muy claro el ejemplo :S, se entiende?
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [C#] Heredar constructores
« Respuesta #4 en: 28 Septiembre 2010, 02:51 am »

Siuto, no se si esto funcione, en teoría debería x)

En cualquier clase, ya sea Hijo, u otra clase con Utilities que tengas, agregas un método static, al que llamas y haces esa condición. No se si sea la mejor manera, si a alguien se le ocurre algo mejor, me avisa X).

Código
  1. class Padre
  2. {
  3.    public Padre(String c1, String c2)
  4.    {
  5.        // ... Explota si la cadena llega con alguna mayuscula
  6.    }
  7. }
  8.  
  9. class Hijo : Padre
  10. {
  11.    public Hijo(String c1, String c2) : base(Hijo.Validate(c1,c2), Hijo.Validate(c1, c2))
  12.    {        
  13.  
  14.    }
  15.    public static string Validate(string c1, c2)
  16.    {
  17.        if (c1.length > c2.Length) return c1.ToLower();
  18.        else return c2.ToLower();
  19.    }
  20. }

Jamás había visto la necesidad de hacer algo así. Cual es la clase base de la que estás heredando? a ver si es la mejor vía.

Un saludo!
En línea

jlrvpuma

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: [C#] Heredar constructores
« Respuesta #5 en: 3 Octubre 2010, 01:40 am »

Siuto, si lo que necesitas es verificar los parámetros puedes usar la solución del método estático, pero si son muchos parámetros el código se vería muy feo, para evitar esto puedes hacer las verificaciones en el cuerpo del constructor; es decir entre { y },aunque de esta forma prescindirías del constructor en la clase Padre, no estaría haciendo nada. Al parecer debes construir un objeto complejo, a mi se me ocurre que te caería a pelo usar el patrón Builder(patrón de diseño de software),éste patrón se usa cuando el algoritmo de construcción de un objeto complejo debe ser independiente del objeto y el proceso de construcción debe permitir diferentes representaciones del objeto. Este patrón es muy simple y facil de implementar.
Un ejemplo sencillo:

Código:
public class Computadora
{
//Propiedades
public string Marca{get;set;}
public string Tipo{get;set;}

//Metodos
public override string  ToString()
{
return "Computadora Marca: " + Marca + ". Tipo: " + Tipo +".";
}
}


public abstract class Builder
{
public Computadora pc;

public abstract void SetMarca();
public abstract void SetTipo();
}

public class Laptop:Builder
{
public override void SetMarca()
{
pc.Marca = "HP";
}
public override void SetTipo()
{
pc.Tipo = "Laptop";
}
}//fin Laptop

public class Desktop:Builder
{
public override void SetMarca()
{
pc.Marca = "Patito";
}
public override void SetTipo()
{
pc.Tipo = "Escritorio";
}
}//fin Desktop

public class Director
{
public void ConstruirMaquina(Builder builder)
{
builder.SetMarca();
builder.SetTipo();
}
}

/****** Esto en la clase Main *********************/
public static void Main(string[] args)
{
Builder  builder;
Director director = new Director();
Console.WriteLine("Presiona el 1 para construir una laptop y 2 para una pc de escritorio");
switch(Console.ReadLine())
{
case "1":
builder = new Laptop();
break;
case "2":
builder = new Desktop();
break;
}

//construye la máquina:
director.ConstruirMaquina(builder);
Console.WriteLine("Se ha construido una {0}", builder.ToString());

}//Fin main


Como ves el objeto Computadora no tiene nada que ver con  su construción y además permite varias
representaciones. En fin, espero haber ayudado, disculpa el código, pero es que no sé cómo ponerlo formateado como uds lo han hecho.
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [C#] Heredar constructores
« Respuesta #6 en: 3 Octubre 2010, 18:53 pm »

No creo que sea buena idea , más bien la primera que dices (de un método estático) me gustó más.

En caso de que un constructor necesite muchos parámetros se puede recurrir siempre a un struct.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
constructores en java
Java
sauce19 7 5,737 Último mensaje 5 Septiembre 2011, 00:26 am
por [Case]
Heredar varios objetos + PHP
PHP
Shell Root 6 4,439 Último mensaje 9 Noviembre 2011, 00:52 am
por WHK
Constructores en Java
Java
Viky30 5 6,508 Último mensaje 27 Noviembre 2011, 18:27 pm
por satu
se puede heredar de JOptionPane ??
Java
jhonatanAsm 4 3,790 Último mensaje 3 Febrero 2012, 14:39 pm
por jhonatanAsm
lio con constructores y destructores
Programación C/C++
Javincy 2 2,616 Último mensaje 8 Febrero 2012, 16:18 pm
por Javincy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines