前言
嗨,大家好, 我们又见面了!
今天要和大家聊聊对象,别误会,不是那些你日常生活中遇到的人或物,而是存在于计算机内存中的实体——C# 对象。
每一个对象都有一段属于自己的故事,从诞生那一刻起,它就开始了自己的冒险旅程,直到最后被回收,回归虚无。这段旅程充满了变数,有时甚至会与其他对象产生交集,形成复杂而美妙的关系网。
这些对象是如何诞生、成长,又是如何走向终点的呢?让我们一起探索吧!
1. 出生
在C#中,对象的“出生”是通过一个叫做构造函数的东西来完成的。
构造函数就像是一个“接生婆”,它负责把对象带到这个世界上,并给它一些初始的属性。
举个例子,我们创建一个Person
类,表示一个人:
public class Person
{
public string Name { get; set; } // 名字
public int Age { get; set; } // 年龄
// 构造函数,用来初始化对象
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
// 创建一个Person对象,相当于“出生”
Person person = new Person("Jacky", 35);
总的来说,对象出生的完整的构造过程大致是这样的:
首先会在内存中分配一定的存储空间;
然后初始化其附加成员;
最后,再调用构造函数执行初始化,这样一个对象实体就完成了其出生的过程。
成长旅程
对象的“出生”仅仅是个开始,它还需要经历更多的成长旅程才能变得更有意义,就像是一个人不断学习和积累经验的过程。
对象的“成长”主要是通过方法来实现的。方法可以让对象做一些事情,或者改变自己的状态。
比如,我们可以给Person
类添加一个GrowOlder
方法,让这个人“长大一岁”:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
// 让年龄增加一岁
public void GrowOlder()
{
Age++;
}
}
// 创建一个对象
Person person = new Person("Jacky", 35);
// 调用方法,让对象“成长”
person.GrowOlder();
Console.WriteLine($"{person.Name} is now {person.Age} years old.");
运行这段代码后,Jacky
的年龄会从35
变成36
。这就像我们每年过生日,年龄都会增加一岁一样。
对象不仅会自己成长,还会和其他对象互动。
比如,我们可以创建一个Family
类,表示一个家庭,里面可以包含多个Person
对象:
public class Family
{
public List<Person> Members { get; set; } // 家庭成员列表
public Family()
{
Members = new List<Person>(); // 初始化家庭成员列表
}
// 添加一个家庭成员
public void AddMember(Person person)
{
Members.Add(person);
}
}
// 创建一个家庭,并添加成员
Family family = new Family();
family.AddMember(new Person("Jacky", 35));
family.AddMember(new Person("Lucy", 30));
// 打印家庭成员信息
foreach (var member in family.Members)
{
Console.WriteLine($"{member.Name} is {member.Age} years old.");
}
在这个例子中,Family
对象和Person
对象之间有了互动。Family
就像一个家庭,Person
就是家庭成员。通过AddMember
方法,我们可以把Person
对象添加到Family
中。这就像现实生活中,家庭成员之间的互动一样。
在对象之间的互动中,有一本神秘的魔法书叫做“设计模式”,帮助我们处理复杂的对象关系,你有空不妨多翻翻看!
总而言之,对象的成长旅程就是这样的一个过程,在一定的约定与规则下,通过方法进行彼此的交互操作,从而达到改变本身状态的目的。
3. 死亡
所有美好的事物都有结束的时候,对象也不例外。
在对象的世界里,它的生命是由 GC 控制的。
GC,也就是垃圾回收器,管理所有的托管堆对象,它会定时检查托管堆中不再被使用的对象,并执行内存回收操作。
当对象被遗忘时(就是对象没有被应用程序引用),就会被 GC 找到并回收了,这意味着这个对象已经完成自己的使命,回归虚无了。
举个例子:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
// 析构函数,对象被回收时调用
~Person()
{
Console.WriteLine($"{Name} has been collected by GC.");
}
}
// 创建一个对象
Person person = new Person("Jacky", 35);
// 解除引用,让对象变成“垃圾”
person = null;
// 强制垃圾回收
GC.Collect();
总结
通过这篇文章,我们用轻松的方式了解了对象的生命周期:
-
出生:通过构造函数创建对象,并赋予初始值。
-
成长旅程:通过方法和外界互动,改变自己的状态。
-
死亡:当对象不再被使用时,GC会清理它。
对象的生命周期就像我们人类一样,有始有终,理解这个过程,不仅能帮助我们写出更好的代码,还能让我们对编程有更深的感悟。
好了,今天的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!
最后,如果你有更好的想法或建议,欢迎留言讨论!
往期精彩
- 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
- C#12 中 5 个节省你开发时间的的改进
- C# 静态类,高手不想让你知道的 15 个真相
- 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
- 用 C# Stopwatch 计时,让代码性能飞起来!
- 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
- 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
- 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
- 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
- C# AutoMapper 10个常用方法总结
- C# 7个方法比较两个对象是否相等
- C# 去掉字符串最后一个字符的 4 种方法
我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号(名称:代码掌控者)!