ラップされたオブジェクトのいずれかを使用できる場所ならどこでも使用できるようにしたい複合オブジェクトを作成しています。したがって、次のオブジェクトが与えられます。
public class Foo{}
public class FooWrapper{
private Foo _foo = new Foo();
public static implicit operator Foo(FooWrapper wrapper)
{
return wrapper._foo;
}
}
次のテストをパスさせたい:
public class ConversionTests
{
private FooWrapper _uat = new FooWrapper();
[Test]
public void Can_Use_Is_Operator()
{
Assert.IsTrue(_uat is Foo);
}
[Test]
public void Can_Use_As_Operator()
{
Assert.IsTrue(null != _uat as Foo);
}
}
MSDN のドキュメントを確認しました
: http://msdn.microsoft.com/en-us/library/scekt9xw.aspx
as: http://msdn.microsoft.com/en-us/library/ cscsdfbt%28v=vs.110%29.aspx
ドキュメントは、それが不可能であることを意味します。
is 演算子は、参照変換、ボックス化変換、ボックス化解除変換のみを考慮することに注意してください。ユーザー定義の変換など、その他の変換は考慮されません。
FooWrapper を構築する方法があるかどうかを知っている人はいますか? おそらくIConvertibleのようなインターフェースを実装していますか?
おまけの質問: as/is がユーザー定義の変換を考慮しない理由を知っている人はいますか?
(そして、この質問が重複していたら申し訳ありません。'as' と 'is' は、stackoverflow では (ほとんどの検索エンジンと同様に) ストップ ワードのように見えるため、これらのキーワードを含む質問を検索することは非常に困難です。)