class Base
{
public K cast<K>()
{
return (K)(object)this;
}
}
class DerivedA : Base { }
class DerivedB : Base { }


void TestMethod(){
Base b=new DerivedA();
DerivedA da=b.cast<DerivedA>();
Base tmp = (Base)da;
DerivedB db = b.cast<DerivedB>();
}

質問です。
このコードでreturn (K)(object)this;
の部分を return (K)this; とするとBaseを型'K'に変換できないと言われるんですがなぜでしょう?
TestMethod内のコードを削除しても同様です。
パラメータつきで呼び出しコードを書いたときにその型に応じてエラーをはくのならわかるのですが、なぜ頭から跳ねられるんでしょうか?