>>379
RectangleとCircleにDraw拡張メソッドが定義されているなら以下のようになる
void hoge( Shape shape )
{
//できない
//shape.Draw();
if(shape is Rectangle)((Rectangle)shape).Draw();
else if(shape is Circle)((Circle)shape).Draw();
}

拡張メソッドを呼び出すときにキャスト必須

「Shapeを継承したクラスはすべてDraw拡張メソッドを定義しなければならない」
という条件はかなり強引で、ヘタすればCLRや共通言語仕様にも手を入れなければいけない問題になる