首页 > 编程笔记 > C#笔记 阅读:54

C#方法重载详解(附带实例)

重载又叫做多载或多重定义,主要含义为同时有多个名称相同的方法时,C# 编译程序会依据方法所传递的参数数量或数据类型,选择符合的建构方法处理。

在正式讲解方法重载前,请先思考我们使用了许多次的 Console.WriteLine() 方法,读者应该发现不论我们传入什么类型的数据,都可以打印出正确的执行结果。

【实例 1】认识 Console.WriteLine() 的重载。
char ch = 'A';
int num = 100;
double e_pi = 3.14159;
bool bo = true;
string str = "C#";
Console.WriteLine(ch);
Console.WriteLine(num);
Console.WriteLine(pi);
Console.WriteLine(bo);
Console.WriteLine(str);
执行结果为:

A
100
3.14159
True
C#

其实以上就是因为 Console.WriteLine() 是一个重载的方法,才可以做到不论我们输入哪一类型的数据都可以顺利打印,下面是上述实例的说明图。


上述重载方法可以增加程序的可读性,也可以增加程序对于程序设计师与使用者的便利性,如果我们没有这个功能,就上述实例而言,我们就必须设计 5 种不同名称的打印方法,造成冗长的程序设计负荷与用户需熟记多种方法的负荷。

C#重载构造方法

将重载应用到构造方法中,看下面的实例程序:
MyClass A = new MyClass(20);
A.PrintInfo();
MyClass B = new MyClass("John");
B.PrintInfo();
MyClass C = new MyClass(25, "Lin");
C.PrintInfo();

public class MyClass
{
    public int age;
    string name;
    public MyClass(int age) => this.age = age;
    public MyClass(string name) => this.name = name;
    public MyClass(int age, string name)
    {
        this.age = age;
        this.name = name;
    }
    public void PrintInfo()
    {
        Console.WriteLine($"{this.name,-5}:{this.age}");
    }
}
程序中,建构方法有 3 个,分别是:
创建对象完成后,随即打印结果:

     :20
John :0
Lin  :25


下面是本程序的说明图:


在上述执行结果中,如果没有为 MyClass 类对象的属性设置初始值,会使用 C# 默认的初始值,编译程序会为字符串变量赋值 null 作为初始值,为整数变量赋值 0 作为其初始值,所以当我们只有一个参数时,可以看到第 3 行会打印 name 的初值是 null,第 5 行会打印 age 的初值是 0。

建议程序设计时,可以增加一个不含参数的建构方法,这个方法可以设定没有参数时的默认值,这样未来程序可以有比较多的弹性。

【实例 2】重新设计实例 1,主要是增设没有参数时的默认值,让整个程序使用时更有弹性:
MyClass A = new MyClass();
A.PrintInfo();

public class MyClass
{
    public int age;
    string name;
    public MyClass()
    {
        this.age = 50;
        this.name = "Curry";
    }
    public MyClass(int age) => this.age = age;
    public MyClass(string name) => this.name = name;
    public MyClass(int age, string name)
    {
        this.age = age;
        this.name = name;
    }
    public void PrintInfo()
    {
        Console.WriteLine($"{this.name,-5}:{this.age}");
    }
}
执行结果

Curry:50

C#重载一般方法

将重载的概念应用在类内的一般方法上,实例如下:
MyMath A = new MyMath();
A.Math(10);
A.PrintInfo();
A.Math(10, 10);
A.PrintInfo();
A.Math(10, 10, 10);
A.PrintInfo();

public class MyMath
{
    public int x;
    public void Math(int a) => this.x = a;
    public void Math(int a, int b) => this.x = a * b;
    public void Math(int a, int b, int c) => this.x = a * b * c;
    public void PrintInfo() => Console.WriteLine($"x = {this.x}");
}
下面是本程序的说明图:


这个实例有 3 个相同名称的方法 Math,可以分别接受 1~3 个整数参数,如果只有 1 个整数参数则 x 等于该参数,如果有两个整数参数则 x 等于两个参数的积,如果有 3 个整数参数则 x 等于 3 个参数的积。

执行结果为:

x = 10
x = 100
x = 1000

相关文章