我有这个非常简单的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication3
{
public interface IInterface1
{
}
public static class Extension1
{
public static void DoSomething<TSource>(this TSource obj)
where TSource : IInterface1
{
}
}
public class Class1 : IInterface1
{
}
public interface IInterface2
{
}
public static class Extension2
{
public static void DoSomething<TSource>(this TSource obj)
where TSource : IInterface2
{
}
}
class MainProgram
{
void DoStuff()
{
var instance1 = new Class1();
instance1.DoSomething();
}
}
}
奇怪的是这一行:
instance1.DoSomething();
给出了这个错误:
以下方法或属性之间的调用不明确:'Extension1.DoSomething(TSource)'和'Extension2.DoSomething(TSource)'
instance1是实现Interface1但不实现Interface2的类的实例,Extension1中的扩展方法是为实现Interface1的对象定义的。 Extension2中的扩展方法是为实现Interface2的对象定义的。因此,似乎不存在任何歧义问题。
为什么电话会变得暧昧?