08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞懂类的那些事儿,就像玩一场超有趣的冒险游戏!
一、类概述:编程世界的 “乐高图纸”
在 C# 的世界里,类就像是一张超级厉害的 “乐高图纸”。你知道吗,乐高积木之所以能拼出各种各样酷炫的东西,是因为有详细的图纸告诉我们怎么组合零件。类也是这样,它定义了一组相关的数据和操作,是创建对象的 “蓝图”。对象呢,就是按照这张蓝图拼出来的乐高成品。
比如说,我们想在编程世界里造一辆汽车,那 “汽车” 类就是设计这辆汽车的图纸,它会规定汽车有哪些 “零件”(数据),比如颜色、速度、型号,还会说明汽车能做哪些 “动作”(操作),比如启动、加速、刹车。有了这张图纸,我们就能 “生产” 出一辆辆符合要求的汽车对象啦!而且,不同的类就像不同主题的乐高图纸,有的能拼出城堡,有的能拼出机器人,超级有趣!
二、声明类:绘制专属 “乐高图纸”
现在,我们要开始学习怎么绘制这张神奇的 “乐高图纸”,也就是声明一个类。在 C# 里声明类,就像给你的乐高图纸起个响亮的名字,再把需要的零件和组装步骤写下来。
声明类的语法非常简单,格式如下:
class 类名
{// 这里写类的成员,比如字段、属性、方法等
}
拿我们前面说的 “汽车” 类举例,声明它就像这样:
class Car
{// 先空着,后面再添加成员
}
class
是 C# 里用来声明类的关键字,就像告诉编译器 “我要开始画图纸啦”!Car
就是类名,起名字的时候要尽量清晰直观,让人一看就知道这个类是干什么的。不过要注意,类名不能和 C# 里的其他关键字重复,而且最好遵循命名规范,比如采用帕斯卡命名法(每个单词首字母大写,如CarModel
)。
有了这个空的类,就相当于我们有了一张空白的乐高图纸,接下来就要往里面添加各种 “零件” 和 “组装说明”,也就是类的成员啦!
三、类成员:乐高图纸里的 “宝藏零件”
类的成员就像是乐高图纸里的 “宝藏零件” 和 “组装秘籍”,它们让类变得有血有肉,充满了生命力。类成员主要包括字段、属性、方法、构造函数等,每一个都超重要!
1. 字段:默默的 “零件小仓库”
字段是用来存储数据的,就像乐高盒子里一个个小零件,记录着类的各种信息。还是以 “汽车” 类为例,汽车的颜色、速度、型号这些属性,就可以用字段来表示:
class Car
{public string color;public string model;public int speed;
}
这里的color
、model
和speed
就是字段,public
表示这些字段可以从类的外部访问,不过在实际开发中,直接用公共字段不太安全,就像把乐高零件随便扔在外面,谁都能拿走修改,容易出问题。所以,我们更多会使用属性来管理数据。
2. 属性:智能的 “零件管理员”
属性就像是一个超智能的 “零件管理员”,它比字段多了很多 “小心思”。属性不仅能控制数据的存取,还能在存取数据的时候执行一些检查操作,就像管理员会检查零件有没有损坏,合不合规格。
我们把 “汽车” 类的字段改成属性:
class Car
{private string _color;private string _model;private int _speed;public string Color{get { return _color; }set { _color = value; }}public string Model{get { return _model; }set { _model = value; }}public int Speed{get { return _speed; }set{if (value >= 0){_speed = value;}else{Console.WriteLine("速度不能为负数哦!");}}}
}
这里,私有字段_color
、_model
和_speed
就像零件的 “内室”,外面的人进不去。公共属性Color
、Model
和Speed
通过get
和set
访问器,控制数据的读取和写入。在Speed
属性的set
访问器里,我们添加了速度不能为负数的检查,这就是属性比字段强大的地方!
3. 方法:类的 “动作大师”
方法是类能执行的各种操作,是类的 “动作大师”。汽车能启动、加速、刹车,这些动作在类里就可以写成方法。方法就像是乐高图纸里的 “组装秘籍”,告诉我们怎么把零件组合起来,做出各种酷炫的动作。
class Car
{// 省略字段和属性定义...public void Start(){Console.WriteLine("汽车启动啦!嘟嘟嘟\~");}public void Accelerate(){Speed += 10;Console.WriteLine(\$"汽车加速了,当前速度为{Speed}");}public void Brake(){Speed = 0;Console.WriteLine("汽车刹车了,稳稳停下!");}
}
在上面的代码里,Start
、Accelerate
和Brake
就是Car
类的方法。void
表示方法执行完后不返回任何结果,方法可以操作属性和字段,改变类的状态。
4. 构造函数:对象的 “出生证明办理员”
构造函数是一个特殊的成员,它就像是对象的 “出生证明办理员”。当我们创建一个对象时,构造函数会被自动调用,负责给对象进行初始化,就像宝宝出生时,医生会记录宝宝的各种信息,办理出生证明。
构造函数的名字和类名一模一样,而且没有返回值类型(连void
都没有)。我们给 “汽车” 类添加一个构造函数:
class Car
{// 省略字段和属性定义...public Car(string initialColor, string initialModel){Color = initialColor;Model = initialModel;Speed = 0;}// 省略方法定义...
}
现在创建Car
对象的时候,就可以在 “出生” 时赋予初始值:
Car myCar = new Car("红色", "小轿车");
这样,myCar
对象一 “出生”,就有了自己的颜色和型号,速度也被初始化为 0。
四、类的实例化:把 “乐高图纸” 变成实物
有了类这张 “乐高图纸”,接下来就要施展魔法,把图纸变成真正的乐高作品啦!在 C# 里,这个过程叫做类的实例化,也就是创建对象。
实例化类的语法是这样的:
类名 对象名 = new 类名(参数);
还是以 “汽车” 类为例:
Car myDreamCar = new Car("蓝色", "跑车");
这里,Car
是类名,就像乐高图纸的名字;myDreamCar
是我们给创建出来的对象起的名字,相当于给拼好的乐高作品贴上专属标签;new Car("蓝色", "跑车")
就是按照Car
类这个图纸,在内存里 “拼出” 一辆汽车对象,并且通过构造函数给它设置了初始的颜色和型号。
创建好对象后,我们就可以使用对象的属性和方法了,就像拿到拼好的乐高作品,我们可以欣赏它,还能按照说明书摆弄它的各种零件。比如:
myDreamCar.Start();
myDreamCar.Accelerate();
Console.WriteLine($"我这辆超酷的{myDreamCar.Model}是{myDreamCar.Color}的!");
第一行代码调用Start
方法,让汽车启动;第二行调用Accelerate
方法,让汽车加速;第三行通过属性获取汽车的型号和颜色并输出。
五、访问修饰符:给类成员设置 “门禁系统”
在编程世界里,有些类成员就像私人房间,有些像公共客厅,我们需要一种方式来控制谁能访问它们,这时候就轮到访问修饰符登场啦!访问修饰符就像是给类成员设置的 “门禁系统”,决定了哪些代码可以访问这些成员。
常见的访问修饰符有public
、private
、protected
和internal
。
public
:就像完全开放的公共广场,任何地方的代码都可以访问被它修饰的成员。比如前面例子里的公共方法Start
,其他代码想让汽车启动,直接调用就可以。private
:是最严格的 “私人领地”,只有类本身的代码才能访问。前面属性例子里的私有字段_color
,外面的代码根本无法直接访问和修改它。protected
:类似于家族内部的秘密基地,不仅类本身的代码可以访问,它的子类(后面会学到)也能访问。internal
:像是公司内部的办公室,只有在同一个程序集(可以简单理解为同一个项目或者相关联的项目集合)里的代码才能访问。
合理使用访问修饰符,能让我们的代码更加安全、规范,就像合理安排房间的门禁,能保护好我们的 “编程家园”!
六、总结:开启你的 C# 类冒险之旅
到这里,C# 类的基本概念我们就探索得差不多啦!从类的概述、声明,到类成员、实例化,再到访问修饰符,每个知识点都像是冒险路上的宝藏。现在你已经掌握了类的基础知识,就像拿到了 C# 世界的初级探险地图,可以开始尝试用类创建各种有趣的对象,编写属于自己的程序啦!
如果在冒险过程中遇到任何问题,或者还想深入了解类的其他知识,随时回来找我哦!祝你在 C# 的编程世界里玩得开心,创造出超级酷炫的程序!
这篇博客围绕大纲,以幽默方式介绍了 C# 类的基础。若你觉得某些部分需要补充案例,或想了解类的进阶知识,随时和我说。
相关文章:
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...