c#构造函数

159 阅读2分钟

构造函数

构造函数即创建对象的时候会自动执行的函数。

构造函数的特点:

  • 名字必须与定义它的类名完全相同,并且没有返回类型
  • 在使用new关键字创建对象时系统自动调用
  • 一般情况下,其作用是在初始化对象时给对象成员赋初值

首先我们来看一下,没有构造函数的时候我们如何创建对象和对属性赋值。

class Student
{
    //属性封装
    public string No { get; set; } //学号(属性)
    public string Name { get; set; }//姓名
    //方法(行为)
    public void SayHi()
    {
        Console.WriteLine("大家好,我的学号:{0},我的姓名:{1}", this.No, this.Name);
    }
}
Student stu = new Student();
stu.No = "001";
stu.Name = "刘亦菲";
stu.SayHi();

注意,此时我们必须先创建对象,然后给对象属性一个一个进行赋值。

我们给Student类添加构造函数:

class Student
{
    public Student(string no,string name)
    {
        this.No = no;
        this.Name = name;
    }
    //属性封装
    public string No { get; set; } //学号(属性)
    public string Name { get; set; }//姓名
    //方法(行为)
    public void SayHi()
    {
        Console.WriteLine("大家好,我的学号:{0},我的姓名:{1}", this.No, this.Name);
    }
}
Student stu = new Student("001","刘亦菲");
stu.SayHi();

此时可以看到我们可以在创建对象的同时直接对属性进行赋值。

但此时如下代码会报错:

Student stu = new Student();

报错原因是我们添加了构造方法,构造方法要求我们必需传递参数才能创建对象,而上述语法没有传递参数。

我们可以通过构造方法的重载来解决此问题:

class Student
{
    public Student(string no,string name)
    {
        this.No = no;
        this.Name = name;
    }
    public Student()
    {
    
    }
    //属性封装
    public string No { get; set; } //学号(属性)
    public string Name { get; set; }//姓名
    //方法(行为)
    public void SayHi()
    {
        Console.WriteLine("大家好,我的学号:{0},我的姓名:{1}", this.No, this.Name);
    }
}

此时我们创建对象的时候就比较灵活,如下两种写法都可以支持:

Student stu = new Student();
stu.No = "001";
stu.Name = "刘亦菲";
stu.SayHi();
Student stu = new Student("001","刘亦菲");
stu.SayHi();