In a case where a method is overloaded and along with that some of the parameters are optional for one or more definitions, then there is some confusion related to which version of the overloaded method is to be called.
To understand in which case betterness rule applies. Let us have a look at the following example:
1. BestMatch
public static void BestMatch(String str)
{
Console.WriteLine("called public static void BestMatch(String str)");
}
2. BestMatch
public static void BestMatch(Object obj)
{
Console.WriteLine("called public static void BestMatch(Object obj)");
}
3. BestMatch
public static void BestMatch(String str,Int16 iint=4)
{
Console.WriteLine("calledpublic static void BestMatch(String str,Int16 iint=4)");
}
4. BestMatch
public static void BestMatch(Int16 iint,String str="WWW")
{
Console.WriteLine("called public static void BestMatch(Int16 iint,String str="WWW")");
}
Above are some definition (overloaded) of the BestMatch method.
When a call to BestMatch method is made using following statement:
BestMatch("WWW");
Guess which overloaded version of the method is called.
First of all the following method is not applicable
because it is not possible to convert String to Int16.
public static void BestMatch(Int16 iint,String str="WWW")
Secondly the following method is overlooked
public static void BestMatch(Object obj)
because the following method is much better.
Lastly the following method is also overlooked
public static void BestMatch(String str,Int16 iint=4)
Because the calling statement omits the optional parameter.
Finally when the following method is called
public static void BestMatch(String str)
The following is the output: