Problema con metodos virtuales

07/08/2007 - 22:04 por Luis Rodriguez | Informe spam
no encontre otro foro mas adecuado para esta pregunta
tengo este fragmento de codigo:
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?
 

Leer las respuestas

#1 Jorge_Mota
07/08/2007 - 22:15 | Informe spam
estás confundido, necesitas reforzas tus conocimientos de OOP (o POO en
español :)
si te fijas en este método:
public override double Area()
{
return PI * x * x;
}

Dice Override, eso significa sobreescribir

En realidad c es del tipo Circle y el tipo Circle a su tipo es del tipo
Dimension

Se define la clase base Dimension que implementa los métodos generales,
por decirlo de alguna manera y las propiedades generales (o también
comunes)

Luego se define la clase específica (circle, cylinder, sphere) en la que
se sobreescribe el método Area, para que se ajuste a la necesidad real del
objeto. esto es la forma de calcular el área del mismo.



En Tue, 07 Aug 2007 14:04:02 -0600, Luis Rodriguez
escribió:

no encontre otro foro mas adecuado para esta pregunta
tengo este fragmento de codigo:
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?





http://fox.desdeguate.com

Preguntas similares