Proposed exercise
Extend the example of the tables and the coffee tables, to add a class "Leg" with a method "ShowData", which will write "I am a leg" and then it will display the data of the table to which it belongs.
Choose one table in the example, add a leg to it and ask that leg to display its data.
Output
Solution
using System;
class Table
{
protected int width, height;
protected Leg myLeg;
public Table(int width, int height)
{
this.width = width;
this.height = height;
}
public void AddLeg(Leg l)
{
myLeg = l;
myLeg.SetTable(this);
}
public virtual void ShowData()
{
Console.WriteLine("Width: {0}, Height: {1}", width, height);
}
}
class Leg
{
Table table;
public Leg()
{
}
public void SetTable(Table t)
{
table = t;
}
public void ShowData()
{
Console.WriteLine("I am a leg");
table.ShowData();
}
}
class CoffeeTable : Table
{
public CoffeeTable(int width, int height) : base (width, height)
{
}
public override void ShowData()
{
Console.WriteLine("Width: {0}, Height: {1}", width, height);
Console.WriteLine("(Coffee table)");
}
}
class TestTable
{
static void Main()
{
Table t = new Table(80,120);
Leg l = new Leg();
t.AddLeg(l);
l.ShowData();
Table[] tables = new Table[10];
Random r = new Random();
for (int i = 0; i < tables.Length ;i++)
{
if (i < tables.Length / 2)
tables[i] = new Table( r.Next(50, 201), r.Next(50, 201));
else
tables[i] = new CoffeeTable( r.Next(40, 121), r.Next(40, 121));
}
for (int i = 0; i < tables.Length; i++)
tables[i].ShowData();
}
}