开始补 .NET 了,先把语法和面向对象这条主线过一遍
最近公司的后端开始缺人,后端大哥也有意让我往这边顶一顶。
我现在的状态有点像两条线一起走:一边还在做 ComfyUI 相关的东西,一边开始正式补 .NET。前面先学过一段 Python 以后,再看 C# 和 .NET 的语法,确实没那么陌生了。但后端大哥也提醒了我一件事:语法不是最核心的,现代开发真正要补的是面向对象。
所以这篇先不急着记业务,先把这几天接触 .NET 时最关键的几块记下来。
1. 为什么开始学 .NET
这次开始碰 .NET,不是因为我突然想换方向,而是项目和岗位都在往这边推。
前面我更多还是在接 SD、ComfyUI、Python 这些东西,解决的问题也偏工具、流程和脚本一点。但公司后端这边开始缺人以后,事情就变了。
因为后端岗位一旦顶不上,很多事情都不是“慢慢学也行”,而是必须尽快能接起来。
后端大哥当时跟我说得也挺直接,大概意思就是:
- 语法先别怕
- 你前面已经碰过 Python 了
- 很多编程语言的基础概念其实是通的
- 真正要补的,是面向对象这套思路
这句话我这几天越学越能体会到。
因为单看语法,确实没有我一开始想得那么吓人。变量、判断、循环、方法这些东西,本质上还是熟悉的。
真正让我有点卡住的,是:
- 类到底是干嘛的
- 对象和类是什么关系
- 属性和字段怎么区分
- 方法为什么要挂在类里面
- 为什么后端项目里到处都是类、接口、实体、服务
所以这篇就先把我现在对 .NET 和面向对象的理解,按最基础的一层记一下。
2. 先说最直观的感受:有 Python 基础以后,再看 C# 没那么慌
我一开始以为自己从 Python 切到 C# 会很难。
结果真正开始看代码以后,反而没有那么乱。
因为很多东西本质上还是熟悉的:
- 变量
- 字符串
- 数字
- 条件判断
- 循环
- 方法
- 参数
- 返回值
这些概念不是换了语言就完全推倒重来。
所以我现在对“后端大哥说的一通百通”这句话,理解也更具体一点了。
它不是说语言都一样,而是说:
只要已经建立起一点编程感,再学一门新语言时,最开始不需要从 0 理解“什么叫代码”,而是重点去看这门语言自己的表达方式和组织方式。
这对我帮助挺大,因为它让我没那么容易一上来就被语法唬住。
我现在会更愿意把 C# 分成两层去看:
第一层:基础语法
这部分和我前面碰到的 Python 有很多相通的地方。
第二层:代码组织方式
这部分就是我现在更需要补的,比如类、对象、封装这些东西。
前一层能让我先把代码读下去,后一层才是真正决定我以后能不能写后端的核心。
3. 语法这块,我现在先抓“能读懂”而不是“全背下来”
这几天开始看 .NET 和 C# 的时候,我没有打算一上来就把所有语法细节都记死。
我给自己的目标比较现实:
先把常见代码看懂,知道每一段大概在做什么。
比如最基础的这些:
string name = "kzh";
int age = 23;
bool isWorking = true;这时候我其实不会把重点放在“语法和 Python 有多不一样”,而是先抓住:
string是字符串类型int是整数bool是布尔值- 变量声明时会把类型写出来
- 行尾一般要加分号
这个阶段我觉得最重要的,不是追求记得多细,而是让自己别再一看到 C# 代码就发虚。
再比如方法:
public int Add(int a, int b)
{
return a + b;
}我现在先把它拆成最直接的几个点:
public是访问修饰符int是返回值类型Add是方法名(int a, int b)是参数return是返回结果
这么拆以后,至少能先读。
我现在越来越觉得,学新语言前期最重要的与其说是“会默写”,不如说是“能拆结构”。
4. 真正让我开始认真看的,是“类”这个东西
只看基础语法,我现在并不会特别慌。
但一看到项目代码里大量出现:
classpublicprivatenew- 属性
- 构造函数
我就知道,真正的重点来了。
因为 Python 那边虽然也能写类,但我前面更多还是在写脚本、看示例、改节点,没真正把“面向对象”当成主线去学。
而到了 .NET 这边,类几乎是绕不开的。
所以我这几天最大的转折点,不是学到某个语法糖,而是开始意识到:
后端代码不是一堆函数平铺着写,而是要按对象和职责去组织。
这个认知对我很关键。
因为它意味着我不能再只停在“这行代码会不会写”,而是要开始问:
- 这段逻辑应该放在哪个类里
- 这个类是负责什么的
- 它暴露哪些方法
- 它要不要保存状态
也就是从“写一段代码”开始往“组织一段代码”走。
5. 我现在对“类”和“对象”的理解,先记个最朴素的版本
这个阶段我不想硬背定义,先记我现在自己能用得上的理解。
类
我现在先把类理解成:
一个模板,一种定义,一种把数据和行为组织在一起的方式。
比如:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void SayHello()
{
Console.WriteLine("hello");
}
}这里的 Person,对我现在来说就是一个“人”的模板。
它里面可以放:
- 数据:比如姓名、年龄
- 行为:比如打招呼
对象
对象我现在先理解成:
按照类这个模板,真正创建出来的一个具体实例。
比如:
Person p = new Person();
p.Name = "kzh";
p.Age = 23;这里 p 就是一个真正创建出来的对象。
这个理解虽然还很基础,但至少让我开始能把“类”和“对象”分开看了。
以前我会觉得这两个词总是绕,现在至少知道:
- 类偏定义
- 对象偏实例
6. 属性和方法,我现在先理解成“一个负责存东西,一个负责做事情”
这两天我在看类的时候,最常碰到的就是属性和方法。
属性
像这种:
public string Name { get; set; }
public int Age { get; set; }我现在先把属性理解成:
挂在对象身上的数据。
它的作用就是存信息。
比如:
- 用户名
- 年龄
- 状态
- 地址
- 时间
这些都很适合放在属性里。
方法
像这种:
public void SayHello()
{
Console.WriteLine("hello");
}我现在先把它理解成:
挂在类里的行为。
:
- 属性偏“这个对象有什么”
- 方法偏“这个对象能做什么”
我觉得这个拆法对入门阶段特别有用。
因为它能先帮我看懂,一个类为什么不只是装数据,还会带一些操作逻辑。
7. 后端大哥一直强调“面向对象”,我现在慢慢能理解为什么了
一开始我其实有点不明白,为什么非得反复强调面向对象。
我会觉得,能把功能写出来不就行了吗?
但这几天看项目代码、再加上自己学这部分以后,我慢慢开始知道为什么它重要。
因为后端项目不像一次性脚本。
后端代码一般会越来越多,而且往往会同时面对:
- 数据
- 业务逻辑
- 接口
- 数据库
- 状态
- 权限
- 异常
如果没有一个比较稳定的组织方式,代码很快就会散。
而面向对象至少先给了一种比较清晰的组织方法:
- 什么数据属于谁
- 什么行为归谁管
- 哪些东西该封在一起
- 哪些东西应该对外暴露
我现在还谈不上真正学透,但至少已经开始能理解:
面向对象不是为了让代码显得高级,而是为了让代码规模上来以后还不至于完全失控。
这句话我现在挺认同的。
8. 我现在先记几个最常见的面向对象关键词
我现在不准备一下把整套理论吃完,先把最常见的几个词记住。
封装
我的当前理解:
把相关的数据和操作包在一起,对外只暴露该暴露的部分。
这个词我现在虽然还在消化,但至少知道它不是空话。项目里很多 public、private 的区别,本质上就在这里。
继承
我的当前理解:
一个类可以在另一个类的基础上继续扩展。
这个我现在接触还不深,但看代码时已经开始会留意它的使用场景。
多态
这个我现在先不硬讲透。
先记住它和接口、重写这些东西关系比较大,后面再往深了补。
我觉得这个阶段最重要的不是装懂,而是先把自己当前真的理解到哪记清楚。
9. 这几天学下来,我最大的变化是:开始不再只盯一行代码,而是开始看结构
前面学 Python 的时候,我更多还是先看语句本身。
到了 .NET 这边,尤其是开始接触类以后,我会发现自己看的层级开始变了。
现在我会慢慢去看:
- 这个类是干嘛的
- 这里为什么要定义属性
- 这个方法为什么属于这个类
- 这个对象是在哪创建的
- 这段逻辑是数据处理,还是业务处理
这个变化挺重要的。
因为它说明我现在接触编程,开始不只是“把某段代码敲出来”,而是慢慢开始理解代码为什么要这样组织。
我觉得这应该就是我从脚本感往后端感走的一步。
10. 先记一个现阶段目标
我现在对 .NET 这条线的目标,先不定太高。
现阶段更实际的是:
- 先把 C# 常见语法看顺
- 先把类、对象、属性、方法这些基础概念弄明白
- 先理解为什么后端项目里大量使用面向对象
- 再往后接接口、实体、服务这些更真实的项目结构
我现在最大的感受是:
前面学 Python 的时候,更多是在补“代码怎么写”;现在开始学 .NET,补的已经不只是代码了,而是代码应该怎么组织。
这个层级明显不一样。所以这篇先记到这里。
我现在已经开始感觉到,后端开发难的地方,是长期维护。
