构造函数即创建对象的时候会自动执行的函数。
构造函数的特点:
- 名字必须与定义它的类名完全相同,并且没有返回类型
- 在使用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();