>>698
class A {}
class B {}

public void Main() {
    A a = new A();
    B ba = (B)(object)a;  // InvalidCastException
    B bb = (B)a;  // cs0030
}
要するにこういう事だけど?

継承元への変換:暗黙のキャスト
継承先への変換:明示的キャスト
継承関係にない:変換演算子のオーバーロードを定義する必要がある

KがBaseか何かで制約されていない限り、Kは継承関係にない型と解釈するのが自然だろう。