I’m confused why this compiles:
private delegate int MyDelegate(int p1, int p2);
private void testDelegate()
{
MyDelegate imp = delegate
{
return 1;
};
}
MyDelegate should be a pointer to a method that takes two int parameters and returns another int, right? Why am I allowed to assign a method that takes no parameters?
Interestingly, these doesn’t compile (it complains about the signature mismatches, as I’d expect)
private void testDelegate()
{
// Missing param
MyDelegate imp = delegate(int p1)
{
return 1;
};
// Wrong return type
MyDelegate imp2 = delegate(int p1, int p2)
{
return "String";
};
}
Thanks for any help!
Ryan
Well, in the first sample the compiler can easily see that no parameters are used, and substitute a few dummies.
This looks like a design decision, somewhere on the road from specify-everything in .NET 1, through anonymous methods in .NET 2 to lambdas in .Net 3