C#基础——构造函数、析构函数
2023-12-16 17:33:39
C#基础——构造函数、析构函数
1、构造函数
构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。
构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作。一个类可以定义多个构造函数,它们可以有不同的参数列表,称为重载构造函数。
构造函数语法结构:
class ClassName
{
// 默认构造函数
public ClassName()
{
// 构造函数的代码逻辑
}
// 带参数的构造函数
public ClassName(parameters)
{
// 构造函数的代码逻辑
}
}
class Person
{
//get与set 代表展开了属性赋值取值的过程
//get表示当使用这个属性的时候会执行的代码
//set表示为这个属性赋值的时候会执行的代码
public string Name { get; set; }
public int Age { get; set; }
// 默认构造函数
public Person()
{
//this 关键字 代表当前实例的对象,属性都要 对象.属性
//在当前类中,this代表当前实例的对象,开发者不需要在创建了,
//如果不写this程序会自动补充
this.Name = "guobeibei";
Age = 18;
}
// 带参数的构造函数(重构)
//重构是指在同一个类中定义多个不同参数的构造函数
public Person(string name, int age)
{
Name = name;
Age = age;
}
//还可以声明静态构造函数
static People() {
//注意:静态构造函数不能直接进行调用,是自动调用的
//(访问实例构造函数的时候会自动激活静态构造函数)
Console.WriteLine("这是静态构造函数");
}
}
// 创建Person对象并使用构造函数进行初始化
Person person1 = new Person(); // 使用默认构造函数
Console.WriteLine(person1.Name); //郭贝贝
// 使用带参数的构造函数(重构)
Person person2 = new Person("郭贝贝同学", 19);
Console.WriteLine(person2.Name); // 郭贝贝同学
Console.WriteLine(person2.Age); // 19
构造函数与普通函数的区别?
两者不同点 | 构造函数 | 普通函数 |
---|---|---|
触发时机 | 在创建类的实例(对象)时自动触发,用于初始化对象的成员变量。 | 需要通过对象或类名来调用,根据需要手动触发执行。 |
返回类型 | 没有返回类型,包括void。它们的目的是初始化对象,而不是返回值。 | 具有返回类型,可以通过return语句返回值。 |
方法名 | 与类名相同,用于标识该构造函数用于创建对象的初始化工作。 | 可以自定义方法名,以便更好地描述方法的功能。 |
调用方式 | 由编译器根据对象的创建来自动调用,且每次创建对象时只能调用一次构造函数。 | 需要通过对象或类名显式调用,可以多次调用。 |
对象初始化 | 用于初始化对象的成员变量,为它们分配内存并设置初始值。 | 可以对对象进行操作和修改,但不会影响对象的创建和初始化。 |
构造函数是用于对象的初始化,而普通函数主要用于对象的操作和行为。构造函数在创建对象时自动调用,而普通函数需要手动调用。
2、析构函数
构造函数在调用的时候会分配一部分内存,这块内存被放在了堆上,c#内存回收机制属于自动回收,原则意义上来讲不需要手动释放,但是如果能够结合良好的编码习惯,可以搭配类似于析构函数之类的方法,让内存释放更高效。
析构函数:当引用对象被回收时,会调用该函数,可以在此处做一些内存回收,一个类中只能有一个析构函数,不能继承,也不能重载,不能被主动调用,没有修饰符,没有参数。
语法结构
class MyClass
{
//析构函数(前面带一个 ~)
~MyClass()
{
// 在这里编写析构函数的代码
}
}
class People {
//设置一个定时器:属于连续执行的属性,可能不会被程序自动释放,容易一直占用内存
Timer timer { get; set; }
public People() {
Console.WriteLine("这是构造函数");
}
~People() {
timer = null;
}
}
文章来源:https://blog.csdn.net/qq_51810680/article/details/135034571
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!