Hacker News new | ask | show | jobs
by moron4hire 1689 days ago
That was already the case. This does not change that issue.

Using the example of Console.Read from the article, in C# 9, you could do `Func<int> read = Console.Read;`. Now, if someone adds an overload for the Read method to Console, that C# 9 code will break.

In C# 10, that doesn't change. What changes is that we don't have to specify `Func<int>`. We can just use `var`.

2 comments

You wouldn't even have to get lambdas involved for this problem to surface. Consider something like this:

   void Foo(double x) { ... }

   Foo(123);
This works, but now I add an overload:

   void Foo(decimal x) { ... }
and the above call is now ambiguous. Note that this example goes all the way back to C# 1.0!

Method overloading (and how it interacts with other language features) is probably the single most complicated part of C# today, for good reasons.

That's right. Additionally, this worked back to C# 4 or 5, I think?