You used the word prototype and then revision.
To me a prototype is a branch off of the main path but a revision follows the same linear path, which is it?
Does Rev B inherit the properties from Rev A or just from Toy A?
Technically, I would use typed collections..google or search this forum..lots of info.
Design-wise:
Im assuming a revision is a branched path.
How in-depth is this solution going to be?
I would firstly make interfaces for a room, a box and a toy.
You could even make interfaces for the typed collections...ie. IToyCollection, IBoxCollection, IRoomCollection
Then make the base class for a room, which obviously inherits from the room interface, and the same for box and toy.
The room base class contains a type collection of boxes.
Each Box object in the Box Collection contains a type collection of toys.
The revision objects are simply child objects of whatever toy class they are prototypes of.
For instance:
WalkingRobot baseWalkingRobot = new WalkingRobot();
WalkingTalkingRobot walkingRobotRev1 = new WalkingTalkingRobot();
In this case the WalkingTalkingRobot class inherits from WalkingRobot and is considered a prototype.
Using this design, the questions you asked become irrelevant.
Im not going to post any code...because...well, that's the fun part :)