闲话 C# 里对象的一生:出生、成长旅程和死亡

Coding-193

前言

嗨,大家好, 我们又见面了!

今天要和大家聊聊对象,别误会,不是那些你日常生活中遇到的人或物,而是存在于计算机内存中的实体——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();

总结

通过这篇文章,我们用轻松的方式了解了对象的生命周期:

  1. 出生:通过构造函数创建对象,并赋予初始值。

  2. 成长旅程:通过方法和外界互动,改变自己的状态。

  3. 死亡:当对象不再被使用时,GC会清理它。

对象的生命周期就像我们人类一样,有始有终,理解这个过程,不仅能帮助我们写出更好的代码,还能让我们对编程有更深的感悟。

好了,今天的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!

最后,如果你有更好的想法或建议,欢迎留言讨论!

往期精彩

  1. 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
  2. C#12 中 5 个节省你开发时间的的改进
  3. C# 静态类,高手不想让你知道的 15 个真相
  4. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  5. 用 C# Stopwatch 计时,让代码性能飞起来!
  6. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  7. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  8. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  9. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  10. C# AutoMapper 10个常用方法总结
  11. C# 7个方法比较两个对象是否相等
  12. C# 去掉字符串最后一个字符的 4 种方法

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号(名称:代码掌控者)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值