C# 探险之旅:第二十六节 - 类型class(对象Object),一场“建房大业”的比喻

嘿,勇敢的探险家们!欢迎来到C#世界的"建房大业"现场。今天,我们要聊的不是砖瓦水泥,而是编程世界里的"高楼大厦"------class(类)和它们的"居民"------对象(Object)。准备好了吗?咱们戴上安全帽,开始这场既有趣又实用的探险吧!

一、类是蓝图,对象是房子

想象一下,你想要建一座梦想中的房子。首先,你需要一份详细的蓝图,这份蓝图告诉你房子的结构、房间布局、水电走向等等。在C#的世界里,class就是这份蓝图。

cs 复制代码
public class House
{
    // 成员变量,比如房间数、楼层数
    public int NumberOfRooms;
    public int NumberOfFloors;

    // 成员方法,比如开门、关门
    public void OpenDoor()
    {
        Console.WriteLine("门开了,欢迎回家!");
    }

    public void CloseDoor()
    {
        Console.WriteLine("门关了,晚安!");
    }
}

这个House类,就像你的房子蓝图,定义了房子有哪些特征(房间数、楼层数)和功能(开门、关门)。

二、从蓝图到实物:实例化对象

蓝图再美,不盖起来也只是纸上谈兵。在C#中,根据class蓝图创建具体房子的过程,叫做"实例化"。实例化后的房子,就是我们的对象(Object)。

cs 复制代码
House myHouse = new House();   //这是我的房子
myHouse.NumberOfRooms = 3;
myHouse.NumberOfFloors = 2;
myHouse.OpenDoor();

看,我们通过new House()这句魔法咒语,把蓝图变成了实实在在的"我的房子"(myHouse)。现在,这栋房子有了具体的房间数、楼层数,还能开门关门呢!

三、对象是独一无二的

就像世界上没有完全相同的两片叶子,C#里的每个对象也是独一无二的。即使它们来自同一个class蓝图,实例化后的对象都有各自独立的属性和状态。

cs 复制代码
House yourHouse = new House();  //这是你的房子
yourHouse.NumberOfRooms = 4;
yourHouse.NumberOfFloors = 3;

看,yourHousemyHouse虽然都是House类的实例,但它们的房间数和楼层数可以完全不同,因为它们是不同的对象。

我们来看程序运行结果:

四、对象的"身份证":引用

在C#的世界里,每个对象都有一个独特的"身份证",那就是它的引用。当我们创建myHouse时,myHouse就是这个对象的引用,它指向内存中那个独一无二的对象实例。

五、类与对象的关系

**类是抽象的,对象是具体的:**类是一个抽象的概念,它定义了对象的结构和行为,但本身并不是一个实体。对象是根据类的定义创建的具体实例,具有实际的值和行为。

**类是模板,对象是实例:**类就像一个模具,定义了对象的形状和功能。你可以使用同一个类创建多个对象,每个对象都有自己独立的状态(字段值),但它们共享相同的结构和行为(方法)。

**类定义了对象的行为和属性:**类中定义的字段、属性、方法等决定了对象可以做什么以及它的状态如何表示。每个对象都可以访问类中定义的成员,但它们的字段值可以不同。

**多个对象可以共享同一个类:**你可以使用同一个类创建多个对象,每个对象都是独立的,具有自己的状态。例如,你可以创建多个 Person 对象,每个对象代表不同的人,但他们都是基于同一个 Person 类创建的。

**静态成员属于类本身:**类中的静态字段和静态方法属于类本身,而不是某个特定的对象。所有对象共享同一个静态成员。非静态成员则属于每个对象的实例,每个对象都有自己的一套非静态成员。

六、总结:从蓝图到家园

回顾一下,class是创建对象的蓝图,它定义了对象的属性和行为。而对象,则是根据这个蓝图实例化出来的具体实体。每个对象都是独一无二的,拥有自己的状态和行为,通过引用来访问和操作。

好了,今天的"建房大业"就到这里。希望你已经理解了class和对象的概念,并准备好在你的C#探险之旅中,建造更多壮观的高楼大厦!下次,我们可能会聊聊如何给这些房子加上"装修"------也就是类的成员修饰符和访问级别。敬请期待,不见不散哦!

相关推荐
与火星的孩子对话6 分钟前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
future141212 分钟前
C#每日学习日记
java·学习·c#
coding随想16 分钟前
JavaScript中的BOM:Window对象全解析
开发语言·javascript·ecmascript
念九_ysl1 小时前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin5211231 小时前
124. Java 泛型 - 有界类型参数
java·开发语言
liulilittle1 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
88号技师1 小时前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
勤奋的知更鸟2 小时前
Java 编程之模板方法模式
java·开发语言·模板方法模式
上单带刀不带妹2 小时前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-3 小时前
【Qt】QStringLiteral 介绍
开发语言·qt