C# C“扩展法”;超载“;
看看下面的代码C# C“扩展法”;超载“;,c#,C#,看看下面的代码 namespace OverLoadTest { class Program { static void Main(string[] args) { ulong value = 10; var foo = new Foo(); foo.DoStuff(value); } } public class Foo {
namespace OverLoadTest
{
class Program
{
static void Main(string[] args)
{
ulong value = 10;
var foo = new Foo();
foo.DoStuff(value);
}
}
public class Foo
{
public void DoStuff(float value)
{
// This is the resolved overload even if we have an extension method that takes ulong
}
}
public static class FooExtensions
{
public static void DoStuff(this Foo foo, ulong value)
{
}
}
}
有人能解释一下为什么在这里不调用使用
ulong
的扩展方法吗?@RufusL因为它是Foo
的扩展,它使用ulong
,而不是ulong
的扩展。看看一个与接口或类方法具有相同名称和签名的扩展方法,它永远不会被调用。在编译时,扩展方法的优先级总是低于在类型本身中定义的实例方法。另请参阅,它可能比第一个更好,并且支持Pavel的注释。如果隐式转换可以避免使用扩展方法,则它会受到青睐。从ulong到float的隐式转换不能让许多程序员满意,但这就是它的运行方式。@RufusL因为它是Foo
的扩展,需要ulong
,不是ulong的扩展
看看一个扩展方法,它的名称和签名与永远不会调用接口或类方法的名称和签名相同。在编译时,扩展方法的优先级总是低于在类型本身中定义的实例方法。另请参阅,它可能比第一个更好,并且支持Pavel的注释。如果隐式转换可以避免使用扩展方法,则它会受到青睐。从ulong到float的隐式转换不能让许多程序员感到高兴,但这就是它的运行方式。