I came to C# from Java, which I’m pretty sure doesn’t (or maybe didn't) allow this, so I was super surprised today when I learnt that C# method overloads can have different return types.

So this class is completely valid:

public class Foo
{
    public Foo Bar();
    public string Bar(Foo foo);
}

For years I’ve thought all overloads had to return the same type, so I’ve designed around a non-existent limitation !

So I’m wondering if any of the APIs I’ve designed over the years would have been ‘better’ if I’d realized this sooner?

What do you think? Is it a good idea to do this?