为什么我们需要在扩展方法中进行显式转换,而不需要静态方法



为什么扩展方法不使用隐式转换,而静态方法使用?有人能举个恰当的例子来解释吗?

感谢

因为C#规范声明:

扩展方法Ci.Mj是合格的,如果:

·Ci是一个非通用、非嵌套类

·Mj的名称是标识符

·Mj在应用于自变量作为静态方法,如所示

·存在隐式标识、引用或装箱转换从expr到Mj的第一个参数的类型。

就C#规范而言,用户定义的转换运算符不同于隐式引用转换,当然也不同于标识或装箱转换。

关于原因的提示:

public static class Extensions
{
    public static void DoSomething(this Bar b)
    {
        Console.Out.WriteLine("Some bar");
    }
    public static void DoSomething(this Boo b)
    {
        Console.Out.WriteLine("Some boo");
    }
}
public class Foo
{
    public static implicit operator Bar(Foo f)
    {
        return new Bar();
    }
    public static implicit operator Boo(Foo f)
    {
        return new Boo();
    }
}
public class Bar { }
public class Boo { }
public class Application
{
    private Foo f;
    public void DoWork()
    {
        // What would you expect to happen here?
        f.DoSomething();
        // Incidentally, this doesn't compile either:
        Extensions.DoSomething(f);
    }
}

C#无法明确地选择要执行的隐式转换。

相关内容

最新更新