任何人都可以解释,为什么以下代码产生错误? (在Microsoft Visual Studio 2008中编译)
- class Base1 { };
- class Base2 { }
- interface I1 { }
- interface I2 { }
- class C : I1,I2 { }
- static class Program
- {
- static T M1<T>(this T t,I1 x) where T : Base1
- {
- return t;
- }
- static T M1<T>(this T t,I2 x) where T : Base2
- {
- return t;
- }
- static void Main(string[] args)
- {
- Base1 b1 = new Base1();
- C c = new C();
- b1.M1(c);
- }
- }
错误是
The call is ambiguous between the following methods or properties: ‘
ConsoleApplication1.Program.M1<ConsoleApplication1.Base1>(ConsoleApplication1.Base1,ConsoleApplication1.I1)
‘ and ‘ConsoleApplication1.Program.M1<ConsoleApplication1.Base1>(ConsoleApplication1.Base1,ConsoleApplication1.I2)
‘
我认为编译器可以使用“where”子句区分两种方法