构造函数

引言

构造函数是什么?

构造函数是一种特殊的 方法1 (函数),该方法在 创建对象 时自动执行,它的作用可以理解为在 对象创建 时执行

就像现实世界:

当一个人出生时,他会拥有以下属性:

  • 姓名
  • 年龄
  • 身份信息

虽然这些属性是他与生俱来的,但是姓名是什么、年龄是多少岁、身份信息又是什么?这些属性的值都应该在他出生的时候被设定好,设定这些值的函数就是 构造函数

这些“出生就要设置的东西”,在 C# 里就是通过构造函数完成的。

为什么需要构造函数?

如果没有构造函数,我们创建对象后必须手动赋值:

Person p = new Person();
p.Name = "小明";
p.Age = 18;

这样会导致:

  • 容易忘记赋值
  • 代码冗长
  • 数据可能不完整

构造函数可以做到:

  • 创建时自动初始化
  • 保证对象状态正确
  • 提高代码安全性

构造函数的形式

构造函数的特点:

  1. 名字必须和类名一样
  2. 没有返回类型(连 void 都不能写)
  3. 在 new 时自动执行
  4. 可以有多个重载2

基本写法

class Person
{
    public Person()
    {
        Console.WriteLine("对象创建了!");
    }
}

使用:

Person p = new Person();

输出:

对象创建了!

最常见用途:初始化数据

这是构造函数最重要的作用。

示例:初始化默认值

class Person
{
    public string Name;
    public int Age;

    public Person()
    {
        Name = "未命名";
        Age = 0;
    }
}

这样创建对象时就不会是空值。


带参数的构造函数

构造函数也可以接收参数。

这是最常见的用法。


示例

class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

创建对象:

Person p = new Person("小明", 18);

这一步是 通过构造函数传入初始化数据


可以有多个构造函数(重载2

一个类可以有多个构造函数。

只要参数不同即可。


示例

class Person
{
    public string Name;
    public int Age;

    public Person()
    {
        Name = "默认用户";
        Age = 0;
    }

    public Person(string name)
    {
        Name = name;
        Age = 0;
    }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

这被称为 构造函数重载

默认无参构造函数

你可能会问,如果我不写构造函数会怎么样?

那么 C# 会自动帮你生成一个 无参默认构造函数

例如:

class Person { }

实际上等价于:

class Person
{
    public Person() { }
}

⚠️ 请注意,但一旦你写了自己的构造函数,默认构造函数就不会自动生成了。

构造函数的执行时机

执行顺序:

new 对象时
   ↓
分配内存
   ↓
执行构造函数
   ↓
对象创建完成

所以 构造函数永远在对象创建时执行

常见使用场景

构造函数通常用于:

初始化字段

age = 0;

注入依赖(进阶)

public Person(Database db)

资源准备

  • 打开文件
  • 初始化连接
  • 创建默认状态

常见误区

❌ 构造函数可以手动调用

必须通过 new 才会触发。

❌ 构造函数有返回值

绝对没有!

❌ 构造函数和普通方法一样

不一样:

项目 构造函数 普通方法
名字 必须和类名一样 任意
返回值 没有 可以有
调用方式 自动执行 手动调用

总结

构造函数 = 在创建对象时自动执行,用来初始化对象的特殊方法

如果你愿意,我可以帮你直接把 下一整章“对象与实例化”完整写好,而且会把 new 的底层原理讲到让新手“瞬间通透”的程度 👍


  1. 方法(method)也叫函数,是类的行为定义,可以声明为 static 或实例方法 详细教程

  2. 重载(overload) 指在同一个类中,允许存在多个同名的方法(或构造函数),只要它们的参数数量或参数类型不同即可,用于实现“同一功能的多种使用方式”。