Can anyone explain, why does the following code produce the error? (Compiling in 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 error is
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)
'
I thought the compiler could distinguish between two methods using the "where" clauses
Constraints are not part of the signature for methods and thus are not used for resolution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With