多态
多态(Polymorphism)是一个希腊语单词,意思是多种形式或形状。如果您希望一个或多个类方法具有相同的名称但有多种形式,则可以使用多态。
在 C# 中,可以通过两种方式实现多态
- 编译时多态
- 运行时多态
编译时多态(方法重载)
编译时多态也称为方法重载。C# 允许我们定义多个名称相同但签名不同的方法。这称为方法重载。
方法重载也称为早期绑定或静态绑定,因为调用哪个方法是在编译时(早于运行时)决定的。
方法重载的规则
- 方法名称应相同,但方法签名必须不同。参数的数量、参数的类型或参数的顺序必须不同。
- 方法的返回类型在方法重载中不起任何作用。
- 在决定绑定哪个方法定义时,可选参数优先于隐式类型转换。
以下示例演示了通过定义多个具有相同类型但参数数量不同的 Print()
方法来实现方法重载。
示例:方法重载 方法重载
class ConsolePrinter
{
public void Print(string str){
Console.WriteLine(str);
}
public void Print(string str1, string str2){
Console.WriteLine($"{str1}, {str2}");
}
public void Print(string str1, string str2, string str3){
Console.WriteLine($"{str1}, {str2}, {str3}");
}
}
以下示例演示了使用相同数量但类型不同的参数实现多态。
示例:方法重载
class ConsolePrinter
{
public void Print(string str){
Console.WriteLine(str);
}
public void Print(int a){
Console.WriteLine($"Integer {a}");
}
}
以下示例演示了使用相同数量但顺序不同的参数实现多态。
示例:方法重载
class ConsolePrinter
{
public void Print(int a, string str){
Console.WriteLine($"{a}, {str}");
}
public void Print(string str, int a){
Console.WriteLine($"{a}, {str}");
}
}
请注意,不考虑方法的返回类型。以下代码将导致编译时错误。
示例:无效方法重载
class ConsolePrinter
{
public void Print(int a, string str)
{
Console.WriteLine($"{a}, {str}");
}
public int Print(int a, string str){
Console.WriteLine($"{a}, {str}");
return 0;
}
}
以下方法使用不同的类型、顺序和参数数量进行重载。
示例:方法重载
class ConsolePrinter
{
public void Print(string str){
Console.WriteLine(str);
}
public void Print(string str1, string str2){
Console.WriteLine($"{str1}, {str2}");
}
public void Print(string str1, string str2, string str3){
Console.WriteLine($"{str1}, {str2}, {str3}");
}
public void Print(int a){
Console.WriteLine($"Integer {a}");
}
public void Print(int a, string str){
Console.WriteLine($"{a}, {str}");
}
public void Print(string str, int a){
Console.WriteLine($"{a}, {str}");
}
}
调用重载方法
我们可以通过传入所需的确切参数来调用重载方法。例如,如果我们想调用显示字符串值的 print(string str)
方法,我们将只传入一个字符串类型的参数。同样,如果我们想调用 Print(int a, string str)
方法,我们将传入 int 和字符串类型的参数。
示例:方法重载
public static void Main()
{
ConsolePrinter cp = new ConsolePrinter();
cp.Print("Hello World!");
cp.Print(1, "John");
}
因此,使用方法重载实现的多态在应用程序设计中扮演着重要角色。.NET API 中最简单的例子是 Console.WriteLine() 方法的重载。
接下来了解运行时多态。