Herencia

26/01/2007 - 21:21 por Francesc | Informe spam
Ya no se que hacer con el error que me da :S

using System;
using System.Collections.Generic;
using System.Text;

namespace Herencia
{
class prog
{

public class Animal
{
//CLASSE PADRE

private string color;

public Animal()
{
color = "Azul";
}

public virtual void HacerSonido()
{
//PONEMOS EL VIRTUAL PARA QUE SE PUEDA CREAR UN NUEVO OBJETO
DE HACER SONIDO
//CON LA PALABRA NEW
Console.Out.WriteLine("???");
}

public string Color
{
get { return color; }
//EL VALUE COJER EL VALOR ASIGNADO EN OTRA CLASE HIJA
set { color = value; }
}
}

public class Gato : Animal
{
//BASE PARA COJER LA ANTERIOR CLASSE
public Gato()
{
Color = "Negro";
}

public new void HacerSonido()
{
Console.Out.WriteLine("MEOOW");
}
}

public class Leon : Gato
{
//EN BASE A LA CLASSE ANTERIOR
public Leon()
{
Color = "Amarillo";
}

public new void HacerSonido()
{
Console.Out.WriteLine("ROOOWR");
}
}

public class Reyleon : Leon
{

public Reyleon() : base()
{
Color = "Amarillo y Negro";
}

public override void HacerSonido()
{
Console.Out.WriteLine("Gran Rugido");
}

}

static void Main(string[] args)
{
Gato g = new Gato();
g.HacerSonido();


Leon l = new Leon();
l.HacerSonido();

Gato poliGato = new Gato();
poliGato.HacerSonido();

Reyleon RL = new Reyleon();
RL.HacerSonido();

Leon poliLeon = (Leon)RL;
poliLeon.HacerSonido();

poliGato = (Gato)RL;
poliGato.HacerSonido();

string tecla = Console.ReadLine();
}
}
}

Y me da este error:
'Herencia.prog.Reyleon.HacerSonido()': no puede reemplazar el miembro
heredado 'Herencia.prog.Leon.HacerSonido()' porque no está marcado como
virtual, abstract u override

Pero el tema es que en la classe padre esta con virtual...

Alguien puede ayudarme??

Thanks!
Francesc Jaumot
España (Lérdia)
 

Leer las respuestas

#1 RFOG
26/01/2007 - 21:39 | Informe spam
Está bien claro:

tienes que poner "virtual" en esos mismos métodos, para conservar las
vtable (o lo que quiera que tenga el C# en su lugar).

Si quieres que el método sea nuevo y se rompa la cadena virtual, tienes
que poner override.


Francesc wrote :
Ya no se que hacer con el error que me da :S

using System;
using System.Collections.Generic;
using System.Text;

namespace Herencia
{
class prog
{

public class Animal
{
//CLASSE PADRE

private string color;

public Animal()
{
color = "Azul";
}

public virtual void HacerSonido()
{
//PONEMOS EL VIRTUAL PARA QUE SE PUEDA CREAR UN NUEVO OBJETO
DE HACER SONIDO
//CON LA PALABRA NEW
Console.Out.WriteLine("???");
}

public string Color
{
get { return color; }
//EL VALUE COJER EL VALOR ASIGNADO EN OTRA CLASE HIJA
set { color = value; }
}
}

public class Gato : Animal
{
//BASE PARA COJER LA ANTERIOR CLASSE
public Gato()
{
Color = "Negro";
}

public new void HacerSonido()
{
Console.Out.WriteLine("MEOOW");
}
}

public class Leon : Gato
{
//EN BASE A LA CLASSE ANTERIOR
public Leon()
{
Color = "Amarillo";
}

public new void HacerSonido()
{
Console.Out.WriteLine("ROOOWR");
}
}

public class Reyleon : Leon
{

public Reyleon() : base()
{
Color = "Amarillo y Negro";
}

public override void HacerSonido()
{
Console.Out.WriteLine("Gran Rugido");
}

}

static void Main(string[] args)
{
Gato g = new Gato();
g.HacerSonido();


Leon l = new Leon();
l.HacerSonido();

Gato poliGato = new Gato();
poliGato.HacerSonido();

Reyleon RL = new Reyleon();
RL.HacerSonido();

Leon poliLeon = (Leon)RL;
poliLeon.HacerSonido();

poliGato = (Gato)RL;
poliGato.HacerSonido();

string tecla = Console.ReadLine();
}
}
}

Y me da este error:
'Herencia.prog.Reyleon.HacerSonido()': no puede reemplazar el miembro
heredado 'Herencia.prog.Leon.HacerSonido()' porque no está marcado como
virtual, abstract u override

Pero el tema es que en la classe padre esta con virtual...

Alguien puede ayudarme??

Thanks!



Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación

Preguntas similares