И всетаки это не то. В данном конкретном случае годится, но я видимо привел не верный пример, ситуация такая :
Есть иерархия классов: Точка, Точка -> Окружность, Точка -> Прям. Тругольник, Точка -> Квадрат
выглядит она так :
Исходный код
// TPoint
class TPoint
{
public double GetPointArea()
{
return 0;
}
public virtual double GetArea()
{
return 0;
}
}
// TCircle
class TCircle: TPoint
{
private int r;
public TCircle()
{
Radius = 0;
}
public TCircle(int r)
{
Radius = r;
}
public double GetCircleArea()
{
return 3.14 * Radius * Radius;
}
public override double GetArea()
{
return 3.14 * Radius * Radius;
}
public int GetDiametr()
{
return 2 * Radius * Radius;
}
public int Radius
{
get
{
return this.r;
}
set
{
try
{
this.r = value;
}
catch(Exception)
{
this.r = 0;
}
}
}
}
// TRectTriangle
class TRectTriangle: TPoint
{
private int a; // sizeA
private int b; // sizeB;
public TRectTriangle()
{
sizeA = 0;
sizeB = 0;
}
public TRectTriangle(int a, int b)
{
sizeA = a;
sizeB = b;
}
public double GetRectTriangleArea()
{
return 0.5 * sizeA * sizeB;
}
public override double GetArea()
{
return 0.5 * sizeA * sizeB;
}
public double GetPerimetr()
{
return sizeA + sizeB + Math.Sqrt(sizeA*sizeA + sizeB*sizeB);
}
public int sizeA
{
get
{
return this.a;
}
set
{
try
{
this.a = value;
}
catch(Exception)
{
this.a = 0;
}
}
}
public int sizeB
{
get
{
return this.b;
}
set
{
try
{
this.b = value;
}
catch(Exception)
{
this.b = 0;
}
}
}
}
class TSquare: TPoint
{
private int s; // size
public TSquare()
{
size = 0;
}
public TSquare(int s)
{
size = s;
}
public int GetSquareArea()
{
return size * size;
}
public override double GetArea()
{
return size * size;
}
public int GetPerimetr()
{
return 4 * size;
}
public int size
{
get
{
return this.s;
}
set
{
try
{
this.s = value;
}
catch(Exception)
{
this.s = 0;
}
}
}
}
В основной программе есть по объекту (экземпляру) каждого класса и переменная ссылка на базовый класс
Код
TPoint Ref;
На форме я по средством чекбоксов выбираю какой объект у меня будет активный и при обработке конкретного чекбокса например тот которыйрый будет значить что активна окружность, я должен ссылке передать адрес нужного объекта, я делаю это явно не правельно.
Код
private void rdBtnCircle_CheckedChanged(object sender, System.EventArgs e)
{
lblActive.Text = "Окружность";
Ref = ((TCircle)Ref);
Ref = Circle;
}
NEED HELP =(
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'