我正在创建一个复合对象,我希望能够在任何可以使用其包装对象的任何地方使用它。所以给定以下对象:
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
作为:http: //msdn.microsoft.com/en-us/library/ cscsdfbt%28v=vs.110%29.aspx
是文档意味着这是不可能的,
请注意,is 运算符仅考虑引用转换、装箱转换和拆箱转换。不考虑其他转换,例如用户定义的转换。
有谁知道是否有一种方法可以构建 FooWrapper 以便/作为转换工作?也许实现一个像 IConvertible 这样的接口?
额外的问题:任何人都知道为什么 as/is 不考虑用户定义的转换?
(很抱歉,如果这个问题是重复的。'as' 和 'is' 在 stackoverflow 上似乎是停用词(与大多数搜索引擎一样),因此很难搜索包含这些关键字的问题。)