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

StackOverflow https://stackoverflow.com/questions/2433204

質問

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

例えば。これによりコンパイル時エラーが発生します。

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

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

ありがとう、

役に立ちましたか?

解決

C#の仕様のセクション10.9.3 これを綴ります。ショートバージョンは、ユーザが、基準型とインターフェイスとの間の変換が、基準タイプが実際にそのインタフェースを実装し、その変換は、同一のオブジェクトが実際に参照されて行われると、その場合にのみ成功することを確信できるように、それが禁止ということです。

の基準タイプとの間の暗黙的または明示的な変換を定義すると、ユーザに基準の変化が存在するであろうという期待を与えます。すべての後に、同じ参照は両方のタイプにすることはできません。一方、ユーザが は、基準タイプとインタフェースタイプ間の変換のために同じ期待を持っていない。

  

ユーザー定義の変換は、インターフェイスタイプから、またはに変換することはできません。具体的には、この制限は、インターフェイス型に変換するときにユーザー定義の変換が発生しないことを確実にする、およびインターフェイス型への変換はは、オブジェクトがある場合にのみ成功すること実際に指定されたのインターフェイス型を実装して変換

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top