23


1

明示的な演算子でインターフェイスを使用できないのはなぜですか?

暗黙的または明示的な演算子を使用したインターフェイスの使用が許可されない理由を誰かが知っているのではないかと思っています。

E.g. これにより、コンパイル時エラーが発生します。

public static explicit operator MyPlayer(IPlayer player)
{
 ...
}

「インターフェースへの、またはインターフェースからのユーザー定義の変換は許可されていません」

ありがとう、

1 Answer


31


C#仕様のセクション10.9.3はこれを綴っています。 短いバージョンでは、許可されていないため、参照型が実際にそのインターフェイスを実装している場合にのみ、参照型とインターフェイス間の変換が成功することをユーザーが確信できるようになります。

参照型間の暗黙的または明示的な変換を定義すると、参照に変更があることをユーザーに期待できます。結局、同じ参照を両方のタイプにすることはできません。 一方、ユーザーは参照型とインターフェイス型の間の変換に対して同じ期待をしていません。

_ ユーザー定義の変換は、_interface-types_との間で変換できません。 特に、この制限により、_interface-type_への変換時にユーザー定義の変換は行われず、_interface-type_への変換は、変換中のオブジェクトが実際に指定された_interface-type_を実装する場合にのみ成功します。 _