The following event can possibly get called hundreds of times a frame.
public bool OnCollision(Body body1, Body body2) { if(body2.Tag is Dog) ((Dog)bo
How about a generic collision method? Then there is no need for inheritance. Just an interface.
public bool OnCollision(TA a, TB b) where TA : ICollidable where TB : ICollidable { a.Collision(b); }