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

news2024/12/25 14:05:01

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

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

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

  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.coloradmin.cn/o/352809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

特征检测之HOG特征算法详解及Opencv接口使用

1. HOG特征简介 特征描述符是图像或图像补丁的表示形式,它通过提取有用信息并丢弃无关信息来简化图像。 通常,特征描述符将大小W x H x 3(通道)的图像转换为长度为n的特征向量/数组。对于 HOG 特征描述符,输入图像的…

ChatGPT会让程序员失业?ChatGPT:“ 是友军,我不从事任何职业。

毫无疑问,ChatGPT“出圈”了。 它似乎无所不能。 许多人担忧它是否会取代自己的饭碗,唯恐自己的进步赶不上 AI 的发展。 然而,有人在试用几次之后,又算是松了口气:打工人我呀,工作算是保住啦~ 那么&…

Lesson5.3---Python 之 NumPy 统计函数、数据类型和文件操作

一、统计函数 NumPy 能方便地求出统计学常见的描述性统计量。最开始呢,我们还是先导入 numpy。 import numpy as np1. 求平均值 mean() mean() 是默认求出数组内所有元素的平均值。我们使用 np.arange(20).reshape((4,5)) 生成一个初始值默认为 0,终止…

ArcGIS笔记3_如何编辑、修改和导出散点数据

本文目录前言Step 1 在ArcGIS中添加并显示坐标点Step 2 将坐标数据保存成shp文件Step 3 编辑或修改坐标数据Step 4 导出修改后的数据:法一:通过转换工具导出Step 5 导出修改后的数据:法二:通过dBASE表导出前言 本博文更多针对Arc…

【函数栈帧的创建和销毁】 -- 神仙级别底层原理,你学会了吗?

文章目录1.函数的调用方式 2.函数在栈区上的动作 1.函数的调用方式 相信你对调用函数一点都不陌生,但是在调用函数的过程中,却存在着很多你无法见到的东西,这是底层信息,想要理解透彻,就得深入底层去观察。 本文以…

Spring之AOP底层源码解析

Spring之AOP底层源码解析 1、动态代理 代理模式的解释:为其他对象提供一种代理以控制对这个对象的访问,增强一个类中的某个方法,对程序进行扩展。 举个例子 public class UserService {public void test() {System.out.println("test.…

LeetCode-216. 组合总和 III

目录题目分析回溯三部曲剪枝优化题目来源 216. 组合总和 III 题目分析 这个和leetcode77组合类似 本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度。 例如 k 2,n 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中…

我的车载开发—{ carservice启动流程 }—

carservice启动流程 大致流程: SystemServer启动CarServiceHelperService服务在调用startService后,CarServiceHelperService的onStart方法通过bindService的方式启动CarService(一个系统级别的APK,位于system/priv-app&#xf…

转转测试环境docker化实践

测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些…

Linux系统基本设置:网络设置(三种界面网络地址配置)

网络地址配置:图形界面配置、命令行界面配置、文本图形界面配置 命令行界面配置 查看网络命令: 想要知道你有多少网卡,都可以通过这两个命令来查看 手动设置网络参数,我们可以使用nmcli这个命令来设置,我们需要知道…

【react实战小项目:笔记】用React 16写了个订单页面

视频地址 React 16 实现订单列表及评价功能 简介:React 以其组件化的思想在前端领域大放异彩,但其革命化的前端开发理念对很多 React 初学者来说, 却很难真正理解和应用到真实项目中。本课程面向掌握了 React 基础知识但缺乏实战经验的开发…

状态机分析

写在前面 状态机是指某事物具有有限状态,且在这些状态之间相互转换的抽象,比如门的开是一个状态,关又是一个状态。本文就一起来看下。 1:状态机的术语 1.1:state 状态,即当前所处的状态,如汽…

电子技术——内部电容效应以及MOS与BJT的高频响应模型

电子技术——内部电容效应以及MOS与BJT的高频响应模型 耦合和旁路电容决定了放大器的低频响应,同时内部电容效应决定了放大器的高频响应。本节,我们简单简单介绍一下内部电容效应,并且更重要的是如何在小信号模型中模型化内部电容效应。 MOS…

C语言操作符经典例题

一、选择题 1、下面哪个是位操作符:( ) A.& B.&& C.|| D.! 答案解析: 答案:A A正确,&——按(二进制)位与,对应的二进制位:有0则0&#…

将python代码封装成c版本的dll动态链接库

前言 将python程序打包成DLL文件,然后用C调用生成的DLL文件,这是一种用C调用python的方法,这一块比较容易遇到坑。网上关于这一块的教程不是很多,而且大部分都不能完全解决问题。我在傻傻挣扎了几天之后,终于试出了一个…

第八章认识 Vue.js基础

vue.js 是一套用于构建用户界面的渐进式前端框架 vue.js 核心实现: 相应式的数据绑定:当数据发生改变,视图可以自动更新,不用关心DOM操作,而转型数据库操作 可组合的视图组件:把视图按照功能切分成若干的…

vr电力刀闸事故应急演练实训系统开发

电力事故是在电力生产和输电过程中可能发生的意外事件,它们可能会对人们的生命财产安全造成严重的威胁。因此,电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中,元宇宙VR会模拟各种触电…

07 react+echart+大屏

reactechart大屏大屏ECharts 图表实际步骤React Typescript搭建大屏项目,并实现屏幕适配flexible rem实现适配1. 安装插件对echarts进行的React封装,可以用于React项目中,支持JS、TS如何使用完整例子官网参考大屏 ECharts 图表 ECharts 图…

【Java基础】泛型(二)-泛型的难点:通配符

本文将尝试将通配符和泛型中的继承,多态一并讲解 关于泛型中继承的注意事项 因为Integer、Double继承了Number,根据多态性,以下语句是合法的 Number n new Integer(10); // OK, 父类引用变量可以指向子类对象 n 2.9 // OK,n实…

Mac-Charles

Charles是什么 HTTP代理服务器,HTTP监视器 Charles可以当作一个代理服务器 当浏览器链接这个代理服务器的时候 Charles会监控浏览器发出和接收的所有数据(reques,response,HTTP Headers(cookies和cash)) 反转代理器 Charles主要功能、 1.SSL代理 2.模拟慢速网络…