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#探险之旅中,建造更多壮观的高楼大厦!下次,我们可能会聊聊如何给这些房子加上"装修"------也就是类的成员修饰符和访问级别。敬请期待,不见不散哦!

相关推荐
橘子海全栈攻城狮3 分钟前
[源码+调试+讲解]微信小程序的成都美食分享系统springboot
开发语言·spring boot·后端·微信小程序·小程序·美食
我是是是是是西红柿9 分钟前
Windows下C语言通过部分路径,模糊搜索对应的程序
c语言·开发语言
shepherdSantiag19 分钟前
第三套题【C语言期末复习】
java·c语言·开发语言
夕泠爱吃糖36 分钟前
C++中如何实现多态性与性能的平衡?
开发语言·c++
文宇炽筱44 分钟前
c++中<cmath>库中的各个函数
开发语言·c++
Feliz Da Vida1 小时前
union find算法 c++
开发语言·c++·算法
-一杯为品-1 小时前
【Python】Matplotlib基本图表绘制
开发语言·笔记·python·学习·matplotlib
minos.cpp1 小时前
Rust之抽空学习系列(四)—— 编程通用概念(下)
开发语言·学习·rust
UltraNext2 小时前
基于PCRLB的CMIMO雷达资源调度方法(MATLAB实现)
开发语言·matlab
笨鸟先飞,笨猪先肥2 小时前
java泛型
java·开发语言