已经遇到扩展的更先进的碰撞问题和静态方法我举例说明,并简化一些代码:扩展方法和静态方法不匹配在C#中的原型匹配
using System;
namespace Test
{
static class EM
{
public static string To(this object o)
{
return o.GetType().ToString();
}
}
class A
{
public static string To() { return "Test.A"; }
}
class B { }
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
object o = null;
o.To();
B b = null;
b.To();
A a = null;
a.To();
A.To();
}
}
}
我给自己买了惊讶,当.NET编译器,范围从3.x到4.y未能解决应在“a.To();
”出现的行中调用哪种方法。当然,我解释了编译器,但这就是错误信息可以带到的地方(字面意思是“Member 'Test.A.To()' cannot be accessed with an instance reference; qualify it with a type name instead
”)。
我发布这个没有详细介绍为什么编译器会提醒程序员(已经知道规则),但更多的是为了提高讨论的内容,这将是对这种问题的近乎或最终的解决方案在微软之前,人们可以很容易地告诉扩展/静态方法调用匹配,而编译器甚至不提供确切的程序员的错误描述或提示。
期待从'stackoverflowers'听到。
你说'a.To()'失败了,但是你引用的错误信息是A.To()'。你是什么意思? – Justin 2012-01-11 18:29:25
@Justin,不,他说得对。 – Shymep 2012-01-11 18:30:35
@Shymep - 你说得对 - 请不理我以前的评论。 – Justin 2012-01-11 18:32:08