Method overloading permits multiple
methods in the same class to have the same name as long as they have unique
signatures. When compiling an invocation of an overloaded method, the compiler
uses overload resolution to determine the specific
method to invoke. Overload resolution finds the one method that best matches
the arguments or reports an error if no single best match can be found. The
following example shows overload resolution in effect. The comment for each
invocation in the Main
method shows which method is actually invoked.
class Test
{
static void F() {
Console.WriteLine("F()");
}
{
static void F() {
Console.WriteLine("F()");
}
static void F(object
x) {
Console.WriteLine("F(object)");
}
Console.WriteLine("F(object)");
}
static void F(int x) {
Console.WriteLine("F(int)");
}
Console.WriteLine("F(int)");
}
static void F(double
x) {
Console.WriteLine("F(double)");
}
Console.WriteLine("F(double)");
}
static void F<T>(T
x) {
Console.WriteLine("F<T>(T)");
}
Console.WriteLine("F<T>(T)");
}
static void F(double
x, double y) {
Console.WriteLine("F(double, double)");
}
Console.WriteLine("F(double, double)");
}
static void Main() {
F(); // Invokes F()
F(1); // Invokes F(int)
F(1.0); // Invokes F(double)
F("abc"); // Invokes F(object)
F((double)1); // Invokes F(double)
F((object)1); // Invokes F(object)
F<int>(1); // Invokes F<T>(T)
F(1, 1); // Invokes F(double, double) }
}
F(); // Invokes F()
F(1); // Invokes F(int)
F(1.0); // Invokes F(double)
F("abc"); // Invokes F(object)
F((double)1); // Invokes F(double)
F((object)1); // Invokes F(object)
F<int>(1); // Invokes F<T>(T)
F(1, 1); // Invokes F(double, double) }
}
As shown by the example, a particular method can always be
selected by explicitly casting the arguments to the exact parameter types
and/or explicitly supplying type arguments.
Comments
Post a Comment