随笔分类 - C#.Net
摘要:本文记录从零手写一个 ORM 框架(Zhaoxi.DbProxy)的完整过程,系统梳理其中涉及的 C# 高级特性与设计思想。 零、框架全貌 在深入各个知识点之前,先从整体上认识这个框架长什么样、能做什么、怎么用。 0.1 项目结构 Zhaoxi.DbProxy.Project/ ├── Zhaoxi
阅读全文
摘要:本文以"用户注册"这个业务场景为主线,逐步演示四种编程思想的演进过程,帮助理解每种思想解决了什么问题、又带来了什么新的局限。 一、POP —— 面向过程编程 核心思想 面向过程(Procedure-Oriented Programming)是最直接的编程方式:把要做的事情按步骤一行一行写下来,从上到
阅读全文
摘要:基于 GOF 23 种设计模式,结合 War3 / 银行 / 请假审批等实际场景讲解。 分三大类:创建型、结构型、行为型。 一、创建型设计模式 1. 简单工厂(Simple Factory) 核心思想:把 new 对象的逻辑集中到一个工厂类,调用方只需传参,不用关心具体类型。 场景:War3 游戏选
阅读全文
摘要:六大原则是写出高质量、可维护代码的基础,记住一句话:对修改关闭,对扩展开放是核心思想,其余五条都是在不同角度强化这个目标。 一、SRP — 单一职责原则 Single Responsibility Principle 核心思想 一个类(或方法)只负责一件事,只有一个引起它变化的原因。 通俗理解 厨师
阅读全文
摘要:一、加密的分类 加密 ├── 不可逆加密(单向散列) │ └── MD5 └── 可逆加密 ├── 对称加密(加密/解密用同一个密钥) │ └── DES / AES └── 非对称加密(加密/解密用不同密钥) └── RSA / ECC 二、MD5 —— 不可逆加密(哈希散列) 核心特点 特点 说
阅读全文
摘要:一、async/await 基础 1.1 什么是async/await 定义 C# 5.0 (.NET 4.5) 引入的语法糖 C# 7.1 开始,Main入口也可以使用 C# 8.0 支持异步流(await foreach)和异步释放(await using) 什么是语法糖 由编译器提供的便捷功能
阅读全文
摘要:一、Parallel 并行编程 1.1 Parallel.Invoke 基本用法 // 一次执行多个委托 Parallel.Invoke( () => { DoWork1(); }, () => { DoWork2(); }, () => { DoWork3(); } ); 特点 可以传入多个委托
阅读全文
摘要:一、核心概念理解 1.1 进程与线程 进程(Process) 计算机中的虚拟记录,描述应用程序运行时消耗的各种资源集合 包含:CPU + 内存 + 磁盘IO + 网络资源 类比:一个公司的整体运作 线程(Thread) 程序进程中执行具体动作的最小执行流 从点击按钮到网络通信,都是线程在执行 类比:
阅读全文
摘要:一、多线程基础概念 多线程的三大特点: 异步执行:不阻塞主线程,多件事可以同时进行 效率高:充分利用 CPU 等计算机资源 无序性:多个线程的执行顺序不可预测,无法控制 ⚠️ 正因为无序性,多线程调试困难,通常只能通过写日志、输出结果、结合线程 ID 来分析问题。 // 获取当前线程 ID,用于区分
阅读全文
摘要:一、数据结构概述 数据结构是底层数据的存储方式,分四大类: Set集合:纯粹的容器,无序存储,元素唯一 线性结构:一对一存储,如数组、链表、队列、栈 树形结构:一对多存储,如二叉树、表达式目录树、菜单结构 图状结构:多对多存储,如拓扑图、地图网络 二、线性结构 连续存储(数组类) Array 内存连
阅读全文
摘要:一、本质与核心概念 表达式目录树是一种数据结构,以树形结构描述代码逻辑。它不是可执行代码,而是对代码结构的描述。 委托(Delegate):编译后直接生成 IL,可以直接执行 表达式目录树(Expression Tree):是一个树形数据对象,描述了计算关系,不能直接执行 Expression<Fu
阅读全文
摘要:一、Lambda 表达式的演变 Lambda 表达式是委托的语法糖,本质上是匿名方法的简化写法,编译器最终会将其编译为委托实例。 .NET 1.0/1.1 — 命名方法委托 public delegate void NoReturnWithPara(int x, string y); NoRetur
阅读全文
摘要:题 1:委托的本质是什么?请解释委托的底层实现原理。 出题意图 考察候选人对委托的深层理解,是否知道委托不仅仅是语法糖,而是有具体的底层实现。 解答思路 先说明委托的表面定义 深入到底层实现(类的本质) 说明继承关系和关键方法 参考答案 委托的本质是一个类(Class),继承自 System.Mul
阅读全文
摘要:一、委托(Delegate)基础 1.1 什么是委托? 委托是一种引用类型,本质上是一个类,继承自 MulticastDelegate。它可以封装方法的引用,类似于 C/C++ 中的函数指针,但更加类型安全。 // 委托的定义 public delegate void NoReturnNoPara(
阅读全文
摘要:Q1:特性和注释有什么区别?特性的本质是什么? 出题意图: 考察对特性基础概念的理解,区分"会用"和"真懂"。 答: 注释在编译后不存在,只是给人看的文字说明。特性编译后以元数据形式存储在程序集中,运行时可以通过反射读取,能携带数据和逻辑,真正影响程序行为。 特性的本质是一个类,直接或间接继承自 S
阅读全文
摘要:一、特性的本质 1.1 什么是特性 特性是一个类:直接或间接继承自 Attribute 抽象类 命名规范:类名默认以 Attribute 结尾(使用时可省略) 应用方式:用方括号 [] 包裹,标记在类或类成员上 编译后存在:与注释不同,特性在编译后依然存在于程序集中 1.2 特性 vs 注释 //
阅读全文
摘要:题目1:什么是反射?它有什么用? 答案 反射(Reflection)是 .NET 提供的一种机制,来自 System.Reflection 命名空间,允许程序在运行时动态地获取程序集(dll/exe)中的类型信息,并基于这些信息创建对象、调用方法、读写属性和字段。 主要用途: IOC 容器:动态加载
阅读全文
摘要:Q1:什么是泛型?为什么要用泛型? 出题意图:考察对泛型基本概念的理解,以及是否能说清楚它解决了什么问题。 答: 泛型是一种"延迟声明类型"的机制。声明时用占位符 T 代替具体类型,调用时再指定。 引入泛型主要解决两个问题: 性能问题:用 object 作为通用参数时,值类型会发生装箱/拆箱,有额外
阅读全文
摘要:一、泛型的概念与引入 1.1 什么是泛型 泛:宽泛的、不确定的 型:类型 泛型:不确定的类型,延迟声明的类型 1.2 为什么需要泛型 传统方案的问题: // 方案1:为每种类型写一个方法 - 代码冗余 public static void ShowInt(int iParameter) { } pu
阅读全文
摘要:一、反射基础概念 1.1 什么是反射? 反射(Reflection)是 C# 中的一项强大功能,来自 System.Reflection 命名空间。它允许程序在运行时动态地: 读取程序集(DLL/EXE)的元数据(metadata) 创建对象实例 调用方法 访问字段和属性 1.2 编译过程理解 高级
阅读全文

浙公网安备 33010602011771号