 <p>If your receiver must know the concrete type, then you're not using Interfaces properly.</p> <p>If you're returning a page, there's really no reason for anything to know what kind of page it is. I would add a <code>Render</code> method to the <code>IPage</code> interface so that all the receiver has to do is call <code>Render()</code> and the page will handle the rest.</p>