ASP .NET(基于.NET 6.0)源码解读

news/2024/11/23 1:51:38/

这几天一直在琢磨在我现有技术认知基础上,未来如何做技术提升。

日思夜想,我整理出了我自己的一套学习规划方案,并希望在实施过程中能够不断调整学习方案与方式,以接近自我提升的效率最大化。

从以下几个大的方面来得到提升:

  1. 看源码
  2. 算法与数据结构
  3. 经典书籍

如果我切实能从以上方面有所收获并不断深入遇到瓶颈时,我可以考虑:

  1. 看基础(操作系统,计算机组成原理...)
  2. 数学
  3. ...

一切看起来都是那么庞大...,每一个点都可以琢磨三五年,成长是需要从长计议的,上面的方案也需要在一个合适的时间(初版先体验,感受)写出细节。人是矛盾的,有时候我总担心过度思考,最终得不到一个好的执行;有时候直接拿起来做又担心战略方向错误,这又需要不断磨练精进自我的思维能力。不过现在来说,我最需要拿出执行力。

如果是看源码的话,我能够得到的了解/提升:

  1. 扎实语言基础知识,所以我在看源码过程中,如果涉及到比较生疏的知识点,我也会动手coding并做记录
  2. 某个概念的底层实现(如依赖倒置、并发模型)
  3. 某个组件的工作流
  4. 优秀的代码设计

我会怎么做:

  1. 带着问题看
  2. 记录看的过程
  3. 了解源码后,能够在此源码基础上添加新功能

看源码过程中涉及到的比较生疏的知识点

=>

  1. lambda
  2. get属性的简写 _age == _age01:

    使用_age => a * b 而不是 _age = a * b的好处是:前者可以在被调用前再计算右边的算式,后者需要在全局变量被加载时,就计算出右边的算式。换句话说,前者是懒加载,后者是预加载。前者可以做到比较好的性能管理。

using语句在哪里?

.net6默认采用的c#语法版本是c# 10,所以在asp .net 6 mvc的program.cs中看不到using语句。c#支持global using,意思是可以将可能在多个类文件中同时引用的程序集写在一个地方,如using.cs。但是我看了每一个文件,都没看到我想看到的那个“using.cs”,其实是asp .net 6把这个配置写在了项目模版中(.csproj)

启用此配置,global using默认会有:

看源码实现时,方法内容全是throw null?

这是因为微软在C# 7.1开始,引入了“引用程序集”的概念,源码有具体实现说项目引用的是实现程序集。引用程序集更轻量化、兼容性更强。微软对引用程序集的说明:引用程序集。微软就不能给个配置方式,可以让我们引用实现程序集,方便调试与代码理解..

 那么如果我们想看源码应该怎么破?

  1. 找到对应的dll,反编译
    1. .net的反编译工具:ILSpy
  2. .net core为开源项目,可以从github获取源码
    1. 源码地址:aspnetcore(注意通过切换分支/tag的方式切换到当前框架版本)

源码内容

通过抛出问题的方式来看源码,目的性会更强,理解会更深刻。

1.我最关心的,ASP .NET MVC的工作流?或者说 项目启动会做哪些事情?

这个问题解决起来比较直观,ASP .NET作为控制台项目,自然启动项为Program.Main,只是ASP .NET 6简化了写法,Program中不再包含main函数,那么我们只需要看Program所有代码执行逻辑,深入了解底层实现,就可以知道项目做了什么事情

var builder = WebApplication.CreateBuilder(args);

通过这段代码,我们可以拿到一个builder对象。

首先看看WebApplication类,定义是:

The web application used to configure the HTTP pipeline, and routes.

解释:被用来配置HTTP管道和路由的web应用。

然后看看CreateBuilder()是如何创建这个builder对象的:


http://www.ppmy.cn/news/25917.html

相关文章

刷题记录:牛客NC51101Lost Cows

传送门:牛客 题目描述: (2≤N≤8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood watering hole and drank a few too many beers before dinner. When it was time to line up for their ev…

Win10搭建Pyspark2.4.4+Pycharm开发环境(亲测可用)

下载资源hadoop3.0.0spark-2.4.4-bin-without-hadoopwinutils下载(对应hadoop3.0.1的bin目录覆盖本地hadoop的bin目录)jdk1.8(默认已按照配置)conda/anaconda(默认已安装)注意:cdh6.3.2的spark为2.4.0但是使用2.4.0本地pyspark有bug,下载的文件可能在第一次解压缩后,如未出现目…

LeetCode-1237. 找出给定方程的正整数解【双指针,二分查找】

LeetCode-1237. 找出给定方程的正整数解【双指针&#xff0c;二分查找】题目描述&#xff1a;解题思路一&#xff1a;双指针。首先我们不管f是什么&#xff0c;即function_id等于什么不管。但是我们可以调用customfunction中的f函数&#xff0c;然后我们遍历x,y(1 < x, y &l…

C++模板(一)

文章目录C模板&#xff08;一&#xff09;1. 泛型编程2. 函数模板2.1 函数模板格式2.2 模板原理2.3 模板实例化2.4 模板参数匹配原则3. 类模板3.1 类模板格式3.2 背景3.3 类模板的实例化C模板&#xff08;一&#xff09; 1. 泛型编程 前面我们学到了函数重载这个特性&#xf…

基础篇—CSS padding(填充\内边距)解析

CSS padding(填充) CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距。 属性说明padding使用简写属性设置在一个声明中的所有填充属性padding-bottom设置元素的底部填充padding-left设置元素的左部填充padding-right设置元素的右部…

白话C#之委托

一、什么是委托&#xff1f; 书本上是这样来定义委托的&#xff1a; 委托是一种动态调用方法的类型&#xff0c;属于引用型。委托是对方法的抽象和封装。委托对象实质上代表了方法的引用&#xff08;即内存地址&#xff09;。委托通常是委托某个方法来实现具体的功能。当我们调…

SpringBoot社区版专业版带你配置热部署

&#x1f49f;&#x1f49f;前言 ​ 友友们大家好&#xff0c;我是你们的小王同学&#x1f617;&#x1f617; 今天给大家打来的是 SpringBoot社区版专业版带你配置热部署 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞&#x1f44d; 收藏⭐ 评论&#x1…

【JavaGuide面试总结】Redis篇·中

【JavaGuide面试总结】Redis篇中1.Redis 单线程模型了解吗&#xff1f;2.Redis6.0 之后为何引入了多线程&#xff1f;3.Redis 是如何判断数据是否过期的呢&#xff1f;4.过期的数据的删除策略了解么&#xff1f;5.Redis 内存淘汰机制了解么&#xff1f;6.什么是 RDB 持久化&…