C#基础入门与面向对象编程学习总结
从零开始学 C#跟着课程一天天往后推从基础语法到面向对象。难度慢慢上来有时候反复查资料边练边理解。这篇文章是这两周学习的总结和备忘。一、C# 和 .NET 的关系刚开始确实没搞明白。后来弄清楚了C# 是语言.NET 是运行平台。就像写字需要纸和笔C# 是笔.NET 是纸。现在主要分两种.NET Framework老版本只能在 Windows 上跑基本是旧项目维护在用。.NET.NET Core / .NET 5微软主推的跨平台版本Windows、Linux、macOS 都能跑性能也更好。我们课程用的是 .NET 8新项目直接选这个就行。二、基础语法2.1 变量和数据类型C# 是强类型语言声明变量必须明确指定类型所有变量必须先定义后使用。这和 JavaScript、Python 那些弱类型语言不一样一开始觉得有点死板但后面理解了——不同类型内存占用不同提前确定类型能提高效率。常用数据类型类型关键字字节范围说明字节sbyte1-128~127有符号短整数short2-32768~32767整数int4±21亿最常用长整数long8±9×10¹⁸后面加 L浮点数float47位精度后面加 F双精度double815-16位精度小数默认高精度decimal1628-29位精度后面加 M布尔bool1true/false字符char20~65535单引号一个字符字符串string--双引号任意长度注意点整数默认是 int 类型小数默认是 double 类型float 必须加 F如1.2Fdecimal 必须加 M如5.5Mchar 本质也是整数类型每个字符对应一个 Unicode 编码字符串可以和 拼接也可以用$插值格式化输出const 和 readonly区别不大但面试经常问到constreadonly初始化时机声明时必须赋值声明时或构造函数中值确定时间编译时运行时类型限制只能是基本类型或 string可以是任何类型静态性隐式静态可以是实例或静态记住const 编译时定死readonly 运行时确定更灵活。类型转换// 自动转换小范围 → 大范围doublenum10;// int 自动转 double// 强制转换大范围 → 小范围可能丢精度doublenum15.5;intnum2(int)num1;// 输出 5小数位直接舍弃// Parse 转换string → 其他类型intaint.Parse(100);doublebdouble.Parse(3.14);// Convert 转换通用stringsConvert.ToString(99);intiConvert.ToInt32(3.14);// 四舍五入2.2 C# 关键字关键字是 C# 预留的标识符有特殊含义不能用作变量名或类名。VS 里关键字默认蓝色显示。学习中常见的using、namespace、class、static、void、int、string、bool、if、else、 switch、case、for、while、do、new、return、this、base、public、private、 protected、virtual、override、abstract、const、readonly、out、ref不需要死记写得多了自然就熟了。如果非要用关键字做变量名前面加比如if但一般不这么干。2.3 注释// 单行注释/* 多行注释 *//// summary/// XML 文档注释写在方法/类前面/// /summary/// param namea参数说明/param/// returns返回值说明/returnsXML 文档注释在 VS 里调用方法时会自动提示写公共方法的时候很有用。2.4 流程控制刚开始学循环觉得挺难的后面写多了也就习惯了for明确知道循环次数用这个常用于遍历数组while知道条件但不清楚具体次数或者无限循环do-while不管怎样先跑一轮再判断if-else 和 switch// if-else用于区间判断if(score90){Console.WriteLine(A);}elseif(score60){Console.WriteLine(B);}else{Console.WriteLine(C);}// switch用于值的一一对应switch(choice){case0:Console.WriteLine(包子);break;case1:Console.WriteLine(米粉);break;default:Console.WriteLine(不合法);break;}switch 的变量可以是 byte、short、int、char、string、枚举类型。每个 case 后面必须加 break。if-else 适合区间判断switch 适合离散值的匹配。2.5 数组内存里一块连续的空间用来存放同类型的多个数据。它是引用类型变量名存的是堆内存地址不是数据本身。所以两个变量指向同一个数组时改一个另一个也跟着变——因为指向同一块内存。数组的两种初始化// 动态初始化先定长度系统给默认值int[]arrnewint[5];// {0,0,0,0,0}// 静态初始化创建时直接放值int[]arr2{1,3,5,7,9};int[]arr3newint[]{1,3,5,7,9};默认值规律整数型0浮点型0.0char空字符stringnullboolfalse。常用操作int[]arr{3,1,4,1,5};// 获取长度intlenarr.Length;// 5// for 遍历for(inti0;iarr.Length;i){Console.WriteLine(arr[i]);}// foreach 遍历foreach(intninarr){Console.WriteLine(n);}// 系统方法Array.Sort(arr);// 排序Array.Reverse(arr);// 反转intidxArray.IndexOf(arr,4);// 查找索引Array.Copy(arr,newArr,arr.Length);// 复制常见异常IndexOutOfRangeException下标越界访问了不存在的索引NullReferenceException数组没初始化null就去访问元素二维数组// 矩形数组每行等长int[,]arrnewint[2,3]{{1,2,3},{4,5,6}};// arr.GetLength(0) → 行数arr.GetLength(1) → 列数// 锯齿数组每行长度可以不同int[][]jaggednewint[3][];jagged[0]newint[2];jagged[1]newint[3];jagged[2]newint[1];2.6 字符串操作字符串是 string 类型属于引用类型用双引号括起来。以下方法在作业里反复用到stringshello163.com;// 属性s.Length;// 获取字符串长度// 查找s.IndexOf();// 查找第一个 的位置找不到返回 -1s.LastIndexOf(.);// 查找最后一个 . 的位置// 截取s.Substring(0,5);// 从 0 开始截 5 个字符 → hellos.Substring(6);// 从 6 开始截到末尾 → 163.com// 分割和拼接string[]partss.Split();// 按 拆 → {hello, 163.com}string.Join(-,new[]{a,b,c});// 用 - 拼接 → a-b-c// 大小写s.ToUpper();// 转大写s.ToLower();// 转小写// 比较s1.Equals(s2);// 判断两个字符串内容是否相等// 格式化string.Format(姓名:{0},年龄:{1},name,age);// 占位符替换// 去除空白s.Trim();// 去掉首尾空格这些方法处理邮箱截取、IP 拆分、用户名提取这类需求时很常用。2.7 方法把重复代码封装进方法里调用就行不用每次重写。方法格式[public] static 返回值类型 方法名(参数列表) { 方法体; return 返回值; // void 则不需要 }四种分类无参无返、无参有返、有参无返、有参有返。参数传递要点值类型传的是副本方法内改了不影响外面引用类型传的是地址方法内改了外面跟着变out 参数可以在方法内返回多个值调用前不需要初始化ref 参数双向传递调用前必须初始化方法重载同一个类中方法名相同参数列表不同个数、类型、顺序与返回值无关。三、面向对象3.1 面向过程 vs 面向对象这是编程思想的转变。面向过程关注怎么做一步步执行动作。比如把大象塞进冰箱——开门→塞象→关门。面向对象关注谁来做把事物抽象成对象由对象之间配合完成。冰箱有开门和关门的行为大象是一个对象。面向对象的核心优势写出通用代码屏蔽差异。张三踩板凳开门和王五直接开门在面向对象中都可以抽象为门.打开()。3.2 类和对象类是模板对象是实例。类不占内存new 出来的对象才占内存。classPerson{// 字段私有privatestring_name;privateint_age;// 属性对外暴露publicstringName{get{return_name;}set{_namevalue;}}publicintAge{get{return_age;}set{if(value0||value120)value0;_agevalue;}}// 方法publicvoidShow(){Console.WriteLine($我叫{Name}今年{Age}岁);}}3.3 封装字段用 private 藏起来外面通过属性 get/set 访问。属性的好处是可以在里面加校验逻辑——比如年龄不能为负、性别只能是男女。这些校验写在属性里比散落在外面的代码安全得多。3.4 构造方法名字和类名一样没有返回值连 void 都不写new 对象时自动调用。写了有参构造后默认无参会失效建议两个都写上。this 用于构造函数之间互相调用publicPerson(){}publicPerson(stringname,intage):this(name,age,男,0,0,0){}publicPerson(stringname,intage,charsex,intchinese,intenglish,intmath){this.Namename;this.Ageage;this.Sexsex;this.Chinesechinese;this.Englishenglish;this.Mathmath;}3.5 访问修饰符修饰符同类中子类中外部类private√××protected√√×public√√√默认规范字段用 private需要给子类用的用 protected对外暴露的方法和属性用 public。3.6 继承子类: 父类就能使用父类的非私有成员。C# 是单继承一个类只能有一个直接父类但支持多层继承传递性子类→父类→爷类。classDog:Animal{publicDog(stringn,doublew):base(n,w){}// 调用父类构造publicoverridevoidEat(){Console.WriteLine(肉真好吃);}}关键点子类不继承父类的构造函数但创建子类对象时会默认调用父类的无参构造base 关键字用于访问父类被隐藏的成员或调用父类构造函数new 关键字用于显式隐藏父类同名成员一般不用3.7 多态父类方法标 virtual虚方法子类用 override 重写。同一个方法名不同子类跑出不同结果。这就是多态的核心。classWeapen{publicdoublePower{get;set;}publicdoubleSpeed{get;set;}publicvirtualvoidAttack(){Console.WriteLine($攻击力:{Power},速度:{Speed});}}classTank:Weapen{publicstringDir{get;set;}publicoverridevoidAttack(){Console.WriteLine($坦克向{Dir}运动,速度{Speed},攻击力{Power});}}classBullen:Weapen{publicstringType{get;set;}publicoverridevoidAttack(){Console.WriteLine($子弹{Type},速度{Speed},攻击力{Power});}}好处以后加新武器不用改已有代码直接继承重写就行符合开闭原则——对扩展开放对修改关闭。3.8 抽象类用 abstract 修饰的类。当一个类中有方法无法确定具体实现时比如动物吃——狗吃肉、猫吃鱼把这个方法声明为 abstract让子类去具体实现。特点抽象类不能实例化不能 new抽象方法必须在抽象类中抽象方法没有方法体子类必须重写抽象类中也可以有非抽象方法四、VS 常用快捷键快捷键功能F5运行程序F7查看代码CtrlK, CtrlC注释选中代码CtrlK, CtrlU取消注释CtrlK, CtrlF格式化全部代码CtrlK, CtrlD格式化全部代码另一种CtrlM, CtrlO折叠所有方法CtrlM, CtrlL展开所有方法CtrlShiftF在文件中查找CtrlH替换CtrlR, CtrlE封装字段五、自己容易错的问题翻了一下这两周写的代码整理了几个毛病命名乱。有的用拼音myage、love_thing有的拼错了C_cricle有的变量名太简略ri、xj过几天自己都看不懂。以后尽量用英文全称遵循驼峰命名。输入校验写了一遍又一遍。TryParse 加 while 循环的校验逻辑在 8 天作业里重复了不下 20 次应该抽成一个通用方法复用。if 嵌套太深。个税计算那道题套了五六层 if现在回头看眼睛都花了。用提前 return 可以减少嵌套层级。变量名和内容对不上。有次把偶数和的变量取名ji奇奇数和的取名ou偶恰好反了。这种错编译器不报但逻辑就是错的。多余 using。每份代码顶上都有很多没用的引用像是 System.Web、System.Xml.Linq是 VS 自动补的该删就删。注释太少。前几天的代码基本没写注释像推箱子 200 多行、个税计算没有注释隔一周再看就得重新理逻辑了。六、总结学了两周下来从刚开始的输入输出都不会到现在能写继承多态的武器系统进步还是能感受到的。几点体会基础语法敲多了自然就熟了现在回头看前面的题感觉很简单堆栈和引用类型的概念虽然抽象但理解了能解释很多奇怪现象面向对象开始有点绕跟着作业多写几遍就好些了命名要规范、重复代码要抽方法、嵌套要减少——这几个习惯从一开始就养成最好七、思维导图

相关新闻

二分算法原理、实现与工程实践全解析

二分算法原理、实现与工程实践全解析

1. 二分算法基础概念解析二分算法(Binary Search)是计算机科学中最基础且高效的查找算法之一,它的核心思想是通过不断缩小搜索范围来快速定位目标元素。这种算法要求数据集必须是有序的,这也是它能发挥威力的前提条件。1.1 算法工…

2026/7/27 5:55:44 阅读更多 →
【AcWing题解/洛谷题解/USACO题解】P1948 Telephone Lines S 通信线路

【AcWing题解/洛谷题解/USACO题解】P1948 Telephone Lines S 通信线路

题目链接 AcWing: https://www.acwing.com/problem/content/description/342/ 洛谷: https://www.luogu.com.cn/problem/P1948 前置知识 1.1.1. 二分法和二分答案 2.2.2. 单源最短路、双端队列宽度优先搜索 思路分析 本题解的设问主要依据AcWing的翻译所…

2026/7/27 5:55:44 阅读更多 →
AM1705工业嵌入式开发实战:ARM9核心、PRU实时单元与硬件设计详解

AM1705工业嵌入式开发实战:ARM9核心、PRU实时单元与硬件设计详解

1. 项目概述:为什么选择AM1705这颗“老将”?在嵌入式开发领域,尤其是工业控制和自动化场景,选型往往是一场在性能、成本、稳定性和长期供货之间的艰难平衡。十年前,当TI推出基于ARM926EJ-S内核的AM1705时,它…

2026/7/27 5:54:44 阅读更多 →

最新新闻

FIPO算法突破大模型长序列推理限制

FIPO算法突破大模型长序列推理限制

1. 项目概述:FIPO算法如何突破大模型推理长度限制在大型语言模型(LLM)的强化学习训练中,基于结果奖励(Outcome-Based Reward,ORM)的方法长期面临一个根本性挑战:当模型需要生成超长推…

2026/7/27 6:06:53 阅读更多 →
文本到图像模型的空间智能评估与优化实践

文本到图像模型的空间智能评估与优化实践

1. 文本到图像模型的空间智能评估困境作为一名长期关注生成式AI的从业者,我注意到当前文本到图像(Text-to-Image, T2I)模型存在一个明显的技术断层:它们可以生成令人惊艳的单体对象,却在处理多物体空间关系时频频出错。…

2026/7/27 6:06:53 阅读更多 →
智能体技术解析:从基础概念到开发实战

智能体技术解析:从基础概念到开发实战

1. 智能体基础概念与核心要素1.1 智能体的本质定义在人工智能领域,智能体(Agent)被定义为能够通过传感器感知环境,并通过执行器自主采取行动以实现特定目标的实体。这个定义包含四个关键要素:环境(Environm…

2026/7/27 6:06:53 阅读更多 →
TMS320C645x VCP2维特比解码器架构、配置与EDMA3协同编程实战

TMS320C645x VCP2维特比解码器架构、配置与EDMA3协同编程实战

1. VCP2维特比解码器架构深度解析维特比解码算法,作为卷积码解码的黄金标准,其核心思想是在一个网格图中寻找一条最可能的路径,以此来纠正传输过程中因噪声引入的错误。简单来说,你可以把它想象成在一个复杂的迷宫里,根…

2026/7/27 6:06:53 阅读更多 →
Pair Prompt技术:利用Claude和Codex提升AI编程效率的实战指南

Pair Prompt技术:利用Claude和Codex提升AI编程效率的实战指南

在AI编程助手快速发展的今天,如何有效利用Claude和Codex这类AI代理提升开发效率成为开发者关注的重点。Pair Prompt(配对提示)技术通过与AI模型进行结构化对话,能够显著提高代码生成质量和问题解决效率。本文将深入探讨Pair Promp…

2026/7/27 6:06:53 阅读更多 →
AI智能问卷设计系统:NLP与知识图谱的实践应用

AI智能问卷设计系统:NLP与知识图谱的实践应用

1. 项目背景与核心价值去年参与某高校社科项目时,我们团队在问卷调研环节踩了个大坑——花了两个月设计的问卷,回收后发现有37%的无效数据。这个问题促使我开始研究AI驱动的智能问卷设计系统,也就是今天要分享的"虎贲等考"方案。传…

2026/7/27 6:05:53 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻