Today I ran into a scenario where I have to create a method that share the same name, params count and params types
with existent one, Something like this:
public static Department GetDepartment(string departmentName)
{
//LOGIC
}
public static Department GetDepartment(string employeeID)
{
//LOGIC
}
at first glance I just said why not to name it with a different name and get things done, but I couldn't! I do want to maintain the readability of my code i'm working on, I want it to be overloaded
to the first one,
so I said why not to add a fake parameter just to workaround this issue from the compiler Point of view.
public static Department GetDepartment(string employeeID, object fakePassWtEver)
{
//LOGIC
}
What is the best practice for this case? I see all the ways can let my code run, but none of them satisfied me
Maintaining readability is precisely why you should rename it:
// Even if the parameter types are enough to distinguish
// between the two, this is ambiguous when reading.
Department GetDepartment(...)
// These two are clear at the call site.
Department GetDepartmentByName(...)
Department GetDepartmentByEmployeeId(...)
Now whenever you call the method, it's absolutely obvious which one you mean. That's very much not the case if you overload the method instead.
I've become increasingly reluctant to overload over time - there are quite a few subtle issues, and readability very often goes down.