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?