13-03-构造函数

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

构造函数的特点:

  • 名字必须与定义它的类名完全相同,并且没有返回类型
  • 在使用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();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容