Phi*_*tle 4 .net c# type-conversion
我正在创建一个复合对象,我希望能够在其中一个包装对象可以使用的任何地方使用它.因此给出以下对象:
public class Foo{}
public class FooWrapper{
private Foo _foo = new Foo();
public static implicit operator Foo(FooWrapper wrapper)
{
return wrapper._foo;
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过以下测试:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我查看了MSDN文档:
是:http
://msdn.microsoft.com/en-us/library/scekt9xw.aspx:http://msdn.microsoft.com/en-us/library/ cscsdfbt%28V = vs.110%29.aspx
该IS文档意味着它是不可能的,
请注意,is运算符仅考虑引用转换,装箱转换和拆箱转换.其他转换(例如用户定义的转化)不予考虑.
有没有人知道是否有一种方法来构建FooWrapper所以是/因为转换将起作用?或许实现像IConvertible这样的界面?
奖金问题:任何人都知道为什么不考虑用户定义的转换?
(对不起,如果这个问题是重复的话.'as'和'is'似乎是stackoverflow上的停止词(与大多数搜索引擎一样),这使得搜索包含这些关键词的问题变得非常困难.)
文档意味着它是不可能的
文档是正确的.
有没有人知道是否有一种方法来构建FooWrapper所以是/因为转换将起作用?
我知道.那没有.(除此之外,显然,制作FooWrapper派生类Foo.)
在is和as运营商那里告诉你的对象真的是.不要试图让他们撒谎.
或许实现像IConvertible这样的界面?
不.
任何人都知道为什么/不考虑用户定义的转换?
首先,因为就像我刚才说的那样,目的is是告诉你对象到底是什么.
其次,由于假设为参数的缘故C#编译器团队希望增加一个新的运营商,比如说frob,有一个语义as使用用户定义的转换操作符. x frob Foo让你背了Foo的时候x是一个FooWrapper.请描述您希望为该表达式生成的IL.我想通过参加这个练习,你会明白为什么这是一个难题.