3

次の暗黙の変換演算子があります。

public static implicit operator InputArgument<T>(T value)
{
   return new InputArgument<T>(value);
}

以下は、ASP.NET MVC コントローラーのコードです。

これは機能します:

InputArgument<string> input = "Something";

これは機能します:

InputArgument<Controller> input = this;

これは機能します:

InputArgument<IPrincipal> input = new InputArgument<IPrincipal>(User);

しかし、これはうまくいきません:

InputArgument<IPrincipal> input = User;

最後の例では、次のエラーが表示されます。

> Cannot implicitly convert type
> 'System.Security.Principal.IPrincipal' to
> 'Engine.InputArgument<System.Security.Principal.IPrincipal>'. An
> explicit conversion exists (are you missing a cast?)

この暗黙的な変換が IPrincipal で機能しない理由は何でしょうか?

4

1 に答える 1

3

ユーザー定義の変換は、インターフェイスでは機能しないと指定されています。それらがこのようなインターフェイスで機能した場合、オブジェクトが実際に を実装するときに、表現を変更するユーザー定義の変換Bar<IFoo>を介して が に変換される状況になる可能性があります。これは驚くべきことです。IFoo IFoo

于 2013-07-29T18:12:38.950 に答える