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

C#构造函数的用法(附带实例)

构造函数(constructor)也有人翻译为构造方法,就是类对象创建完成后,自行完成的初始化工作,如果我们没有为字段数据设定初始值,系统会依据字段数据特性设定初始值,例如 int、double 数据的初始值是 0,bool 的初始值是 flase。

例如,当我们为 TaipeiBank 类创建对象后,初始化的工作应该会将该对象的存款余额设为 0:
TaipeiBank A = new TaipeiBank();
上述类名称是 TaipeiBank,我们使用 new 运算符然后接 TaipeiBank(),注意语句中有“()”存在,其实这就是在调用构造函数,类中默认的构造函数名称应该与类名称相同。

读者可能会想,我们在设计 TaipeiBank 类时没有创建 TaipeiBank() 方法,程序为何没有错误?如果我们在设计类时,没有设计与类名称相同的构造函数,C# 编译会自动协助创建一个默认的构造函数。

【实例 1】简单说明构造函数与系统默认的初始值。
TaipeiBank A = new TaipeiBank();
A.PrintInfo();

public class TaipeiBank
{
    int account;
    int balance;
    public void PrintInfo()
    {
        Console.WriteLine($"账号({account}) 目前余额 : {balance}");
    }
}
执行结果为:

账号(0) 目前余额 : 0

上述程序没有构造函数,其实 C# 在编译时会自动为上述程序创建一个默认的构造函数。

C#编译程序为实例 1 中的 TaipeiBank 类创建一个默认的构造函数,其实第 8~10 行就是 C# 编译程序创建的默认构造函数。
TaipeiBank A = new TaipeiBank();
A.PrintInfo();

public class TaipeiBank
{
    int account;
    int balance;
    public TaipeiBank()
    {
    }
    public void PrintInfo()
    {
        Console.WriteLine($"账号({account}) 目前余额 : {balance}");
    }
}
执行结果与实例 1 相同。

C#自定义构造函数

所谓的自定义构造函数就是在创建类时,自行创建一个和类相同名称的方法,这个方法还有几个特色:
另外,当 C# 编译程序看到类内有自建构造函数后,它就不会再创建默认的构造函数了。

1) 无参数的构造函数

就如同标题所说,这一类构造函数中没有任何参数。

【实例 2】创建 BankTaipei 类时增加设计默认构造函数,这个程序主要是在创建好对象 A 后,打印 A 对象的存款余额。
TaipeiBank A = new TaipeiBank();
A.PrintInfo();

public class TaipeiBank
{
    int account;
    int balance;
    public TaipeiBank()
    {
        account = 0;
        balance = 0;
    }
    public void PrintInfo()
    {
        Console.WriteLine($"账号({account}) 目前余额 : {balance}");
    }
}
执行结果为:

账号(0) 目前余额 : 0

2) 有参数的构造函数

所谓的有参数的构造函数是,我们在声明与创建对象时需传递参数,这些参数会传送给构造函数。

【实例 3】在构造函数中设定薪资,同时使用 this 关键词。
Salary A = new Salary(30000);
A.PrintInfo();

class Salary
{
    int paid;
    public Salary(int paid) // constructor 方法
    {
        this.paid = paid; // 设置初始值
    }
    public void PrintInfo()
    {
        Console.WriteLine($"薪资是 = {paid}");
    }
}
执行结果为:

薪资是 = 30000

上述第 7~10 行是构造函数,为了区分传入参数 paid,笔者第 9 行用 this.paid 代表字段成员。

3) 使用表达式主体方法设计构造函数

我们也可以将表达式主体方法的概念应用在构造函数上,这样可以简化设计。

【实例 4】使用表达式主体方法重新设计实例 3。
Salary A = new Salary(30000);
A.PrintInfo();

class Salary
{
    int paid;
    public Salary(int paid) => this.paid = paid;
    public void PrintInfo()
    {
        Console.WriteLine($"薪资是 = {paid}");
    }
}
执行结果和实例 3 相同。

相关文章