Cita:
Iniciado por Farookh_Bulsara
no encontre otro foro mas adecuado para esta pregunta
tengo este fragmento de codigo:
Código:
using System;
using System.Collections.Generic;
using System.Text;
namespace PruebaMetodosVirtuales
{
class Program
{
static void Main(string[] args)
{
double r = 3.0, h = 5.0;
Dimensions c = new Circle(r);
Dimensions s = new Sphere(r);
Dimensions l = new Cylinder(r, h);
// Display results:
Console.WriteLine("Area of Circle = {0:F2}", c.Area());
Console.WriteLine("Area of Sphere = {0:F2}", s.Area());
Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
}
}
public class Dimensions
{
public const double PI = Math.PI;
protected double x, y;
public Dimensions()
{
}
public Dimensions(double x, double y)
{
this.x = x;
this.y = y;
}
public virtual double Area()
{
return x * y;
}
}
public class Circle : Dimensions
{
public Circle(double r) : base(r, 0)
{
}
public override double Area()
{
return PI * x * x;
}
}
class Sphere : Dimensions
{
public Sphere(double r) : base(r, 0)
{
}
public override double Area()
{
return 4 * PI * x * x;
}
}
class Cylinder : Dimensions
{
public Cylinder(double r, double h) : base(r, h)
{
}
public override double Area()
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}
}
no entiendo esa parte de la construccion; los objetos c,s,l llegarina a ser objetos de la clase Circle,Sphere o Cylinder, respectivamente ? o todos son objetos de la clase Dimensions?
ya q las clases Circle,Sphere y Cylinder heredan de la clase Dimensions
y al llamar al metodo Area (al llamar desde los objetos c,s,l) a cual metodo llama ,al virtual del padre o al q le corresponde a cada uno?
y una cosa mas ,estuve leyendo tutoriales pero hay algo q no le entiendo sobre los metodos virtuales( ya entiendo su uso,pero no su funcionamiento) osea dice que al poner a un metodo override ,
reemplaza el codigo del metodo de la clase padre, pero en realidad no lo reemplaza ,porque al volver a llamar al metodo virtual de la clase padre el codigo es el mismo
alguien podria explicarmelo mejor porfavor?
Hola, buen día antes qeu anda quiero comentarte que no soy un experto en la materia pero, tratare de explicarte lo poco que se y lo poco que entiendo:
Construccion de objetos: Se usa un nuevo constructor en cada caso, pero este constructor usa el constructor del padre, pasando el argumento que recibe y colocando 0 en el otro argumento.
Clases: Los objetos c, s, y l son objetos de tipo Circle,Sphere o Cylinder, respectivamente, pero no olvides que estas calse derivan de Dimensions, por lo tanto HEREDAN TODOS los metodo y propiedades de la clase Dimensions, asi que puedes hacer uso de los métodos de la calse hija o la calse padre.
Con respecto a los metodos virtuales: No es que elimines el mètodo de la calse padre sino mas bien que escribes un nuevo método en la calse hija, cuando llamas al método lo se aplica el método de la calse hija y no el de la calse padre. Este es un buen ejeplo de los métodos virtuales ya que para cada figura diferente se aplica una formula distitan y magina que tienes ahora tienes una clase triángulo deberias reescribir el método Area.
Espreso que esto te ayude si quieres mas información poste y si hay correciones en lo que escribì por favor haganmelo saber.