У вас есть понимание полиморфизма с ног на голову. Если бы у вас была программа для рисования, которая использовала этот полиморф c:
abstract class Shape {
public int X = 0;
public int Y = 0;
}
class Rectangle:Shape {
public int Width = 10;
public int Height = 20;
}
class Circle:Shape {
public int Diameter = 50;
}
В родительском классе вы бы не смотрели на тип потомка и делали что-то другое:
foreach(Shape s in _listOfShapes){
if(s is Circle c)
myCanvas.DrawCircle(c.X,c.Y,c.Diameter);
else if(s is Rectangle r)
myCanvas.DrawRectangle(c.X,c.Y,r.Width,r.Height);
}
Вы создаете способ обрабатывать все фигуры одинаково:
abstract class Shape {
public int X = 0;
public int Y = 0;
abstract void DrawYourself(Canvas c)
}
class Rectangle:Shape {
public int Width = 10;
public int Height = 20;
override DrawYourself(Canvas c){
c.DrawRectangle(base.X,base.Y,this.Width,this.Height);
}
}
class Circle:Shape {
public int Diameter = 50;
override DrawYourself(Canvas c){
c.DrawCircle(base.X,base.Y,this.Diameter);
}
}
Теперь все фигуры знают, как рисовать себя на холсте (которым владеет родитель), вы относитесь ко всем как простые старые формы:
foreach(Shape s in _listOfShapes){
s.DrawYourself(myCanvas);
}