public static void Main()
new S().send( recv, new M());
new S().send( recv, new N());
new X().send( recv, new N());
new X().send( recv, new M());
public interface IMReceiver
void accept( S sender, M message);
public class R : IMReceiver
void IMReceiver.accept( S sender, M message){}
public void accept( X sender, N message){}
public void send( IMReceiver receiver, M message )
receiver.accept(this, message);
receiver.accept( new X(), new N() );
public void send( R receiver, N message )
receiver.accept(this, message);