31

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

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

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

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

ありがとう、

4

1 に答える 1

39

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

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

ユーザー定義の変換は、interface-typesとの間で変換することはできません。特に、この制限により、 interface-typeへの変換時にユーザー定義の変換が発生せず、変換されるオブジェクトが実際に指定された interface-type を実装している場合にのみ、 interface-type への変換が成功すること保証されます。

于 2010-03-12T14:09:15.013 に答える