C#-构造函数
构造函数(或称构造方法)
构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。
作用:帮助我们初始化对象(给对象的每个属性依次的赋值)。
不用构造函数的情况下,如下代码:
//定义一个Students类 public class Students {private string _name; public string Name//姓名属性 { get { return _name; } set { _name = value; } } private char _gender; public char Gender//性别属性 { get { return _gender; } set { if (value != '男' && value != '女') { value = '男'; } _gender = value; } } private int _age; public int Age//年龄属性 { get { return _age; } set { if (value < 0 || value > 100) { value = 0; } _age = value; } } private int _chinese; public int Chinese//语文成绩属性 { get { return _chinese; } set { _chinese = value; } } private int _math; public int Math//数学成绩属性 { get { return _math; } set { _math = value; } } private int _english; public int English//英语成绩属性 { get { return _english; } set { _english = value; } } public void SayHello() { Console.WriteLine($"我叫{this.Name},性别{this.Gender},年龄{this.Age}" ); } public void ShowScore() { Console.WriteLine($"{this.Name}的语文成绩是{this.Chinese}分,数学成绩是{this.Math}分," + $"英语成绩是{this.English}分,总成绩是{(this.Chinese+this.Math+this.English)}分。"); } }
//Main方法 static void Main(string[] args) { //zsStudent Students zsStudent = new Students(); zsStudent.Name = "ZS"; zsStudent.Gender = '男'; zsStudent.Age = 22; zsStudent.Chinese = 80; zsStudent.Math = 80; zsStudent.English = 80; zsStudent.SayHello(); zsStudent.ShowScore(); Console.ReadKey(); //lsStudent Students xlStudent = new Students(); xlStudent.Name = "xl"; xlStudent.Gender = '女'; xlStudent.Age = 21; xlStudent.Chinese = 90; xlStudent.Math = 90; xlStudent.English = 90; xlStudent.SayHello(); xlStudent.ShowScore(); }
上面代码没有用到构造函数,在Main方法中调用Students类创建对象并给属性赋值时,当需要创建多个对象("zsStudent","xlStudent","lsStudent","wwStudent"……),你会发现,有一段给属性赋值的代码需要反复的写,这样写出来的代码就显得很臃肿,那么会不会有一种方法只需要一行代码就能完成创建对象和给属性赋值呢?
有,我们这时候就需要用到构造函数。
在上面代码的基础上,我们加上构造函数,如下:
//定义一个Students类 public class Students { public Students(string name,char gender,int age,int chinese,int math,int english)//构造函数 { this.Name = name; this.Gender = gender; this.Age = age; this.Chinese = chinese; this.Math = math; this.English = english; } private string _name; public string Name//姓名属性 { get { return _name; } set { _name = value; } } private char _gender; public char Gender//性别属性 { get { return _gender; } set { if (value != '男' && value != '女') { value = '男'; } _gender = value; } } private int _age; public int Age//年龄属性 { get { return _age; } set { if (value < 0 || value > 100) { value = 0; } _age = value; } } private int _chinese; public int Chinese//语文成绩属性 { get { return _chinese; } set { _chinese = value; } } private int _math; public int Math//数学成绩属性 { get { return _math; } set { _math = value; } } private int _english; public int English//英语成绩属性 { get { return _english; } set { _english = value; } } public void SayHello() { Console.WriteLine($"我叫{this.Name},性别{this.Gender},年龄{this.Age}" ); } public void ShowScore() { Console.WriteLine($"{this.Name}的语文成绩是{this.Chinese}分,数学成绩是{this.Math}分," + $"英语成绩是{this.English}分,总成绩是{(this.Chinese+this.Math+this.English)}分。"); } }
//Main方法 static void Main(string[] args) { //zsStudent Students zsStudent = new Students("zs",'男',22,80,80,80); zsStudent.SayHello(); zsStudent.ShowScore(); Console.ReadKey(); //lsStudent Students xlStudent = new Students("xl",'女',22,90,90,90); xlStudent.SayHello(); xlStudent.ShowScore(); Console.ReadKey(); }
上面代码中,我们在Students类中加了一段同名的函数,这就是构造函数,构造函数是一个比较特殊的方法。
public Students(string name,char gender,int age,int chinese,int math,int english)//构造函数 { this.Name = name; this.Gender = gender; this.Age = age; this.Chinese = chinese; this.Math = math; this.English = english; }
构造函数的特点:
1)、构造函数没有返回值,连void也不能写。
2)、构造函数的名称必须跟类名一样。代码如下:
//定义一个Students类 public class Students { public Students(string name,char gender,int age,int chinese,int math,int english)//构造函数 {
3)、构造函数可以有参数,new对象的时候传递参数即可。
3)、创建对象的时候会执行构造函数。也就是说,在new这一步骤的时候,会执行构造函数。
static void Main(string[] args) { //zsStudent Students zsStudent = new Students("zs",'男',22,80,80,80);
4)、构造函数的访问修饰符必须时public。如果访问修饰符不为public,创建对象时,将无法调用构造函数来初始化对象。
5)、构造函数是可以有重载的。也就是有多个参数不同的构造函数。因为有时候,我们可能并不需要给所有的属性进行赋值。
拓展:
1)类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数之后,不管是有参数的还是无参数的,那个默认的无参数的构造函数都被干掉了。
2)创建对象时,关键字new进行了三步工作:
1、在内存中开辟一块空间
2、在开辟的空间中创建对象
3、调用对象的构造函数进行初始化对象
3)关键字this
1、代表当前类的对象
2、在类当中显示的调用本类的构造函数 ,语法: “:this”(冒号加this),代码如下:
public Students(string name, char gender, int chinese, int math, int english)//构造函数 { this.Name = name; this.Gender = gender; this.Chinese = chinese; this.Math = math; this.English = english; } public Students(string name, char gender, int age) : this(name,gender,age,0,0,0) { }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义