This really depends on how you're using the Ball object and how you're going to go about cloning it. It also depends greatly on what the listener is doing.
If you want ballOne and ballTwo to have the exact same registered event listeners, you can just pass the event handler reference from ballOne to ballTwo and they should both work. Keep in mind, though, that if you then add a new event listener to ballOne, ballTwo won't also get it.
I'm not sure what you're trying to do, but this can lead to memory leaks and lots of hassles when you've got lots of cloned balls all over the place and you won't know which ones have which event listeners.
You might be better off creating a method on whatever class is holding the balls so that it can add the appropriate event listeners.
public class Box
{
public void InitializeBalls()
{
Ball ballOne = new Ball();
this.RegisterBall(ballOne);
Ball ballTwo = ballOne.Clone();
this.RegisterBall(ballTwo);
}
public void Ball_Bounce()
{
}
public void RegisterBall(Ball ball)
{
ball.Bounce += Ball_Bounce;
}
}
public class Ball
{
public event BounceEventHandler Bounce;
public delegate void BounceEventHandler();
public Ball Clone()
{
Ball clonedBall = null;
// Do some fancy clonin'
return clonedBall;
}
}