DotNET框架

article/2025/9/10 8:33:46
1.1 .NET的诞生

        DotNET(以下称.NET)
        2002年,微软发布了.NET框架的第一个版本,称其实现了下一代系统的目标。.NET框架是一种比MFC和COM编程技术更抑制并面向对象的环境。

具备以下特点:
        多平台
        行业标准
        安全性

1.2 .NET框架组成

        .NET框架有三部分组成。执行环境诚为CLR(Common Language Runtime,公共语言运行库)
        CLR在运行时管理程序的执行

  包括以下内容:
        内存管理和垃圾回收
        代码安全验证
        代码执行、线程管理及异常处理

        编程工具涵盖了编码和调试的一切

  包括以下内容:
        Visual Studio集成开发环境(IDE  现最新版本Visual Studio2019)
        .NET兼容的编译器
        调试器
        网站开发服务端技术,如ASP.NET

        BCL(Base Class Library,基础类库)是.NET框架使用的一个大的类库,而且可以在你的程序中使用

1.3新的开发环境

        ①面向对象的开发环境
                CLR、BCL和C#完全是面向对象的,并形成了良好的集成环境

        ②自动垃圾回收
                CLR有一项服务称为GC(Garbage Collector,垃圾收集器)自动管理内存

        ③互操作性
                .NET框架专门考虑了不同的.NET语言、操作系统或Win32DLL和COM之间的互操作性
                .NET语言的互操作性允许用不同的.NET语言编写的软件模块无缝地交互。
                    ■ 一种.NET语言写的程序可以使用甚至继承用另外一种.NET语言写的类,只需要遵循一定的规则即可
                    ■正因为能够很容易地集成不同编程语言生成的模块,.NET框架有时被称为是语言无关的
                .NET提供一种称为平台调用(platforminvoke,P/Invoke)的特性,允许.NET的代码调用并使用非.NET的代码。它可以使用标准Win32 DLL导出的纯C函数的代码,比如
Windows API
                .NET框架还允许与COM进行互操作。.NET框架软件组件能调用COM组件,而且COM组件也能调用.NET组件,就像它们是COM组件一样

        ④不需要COM
            .NET框架使程序员摆脱了COM的束缚。作为一个C#程序员,你肯定很高兴不需要使用COM编程环境,所有.NET对象都继承一个名为object的类。接口编程仍是.NET中的一个重要部分,但不再是中心主题了
                类型库 在COM中,类型信息作为.tlb文件保存在类型库中,它和可执行代码是分开的在.NET中,程序的类型信息和代码一起被保存在程序文件中。
                手动引用计数 在COM中,程序员必须记录一个对象的引用数目以确保它不会在错误的时间被删除。在.NET中,GC记录引用情况并只在合适的时候删除对象
                HRESULT COM使用HRESULT数据类型返回运行时错误代码。NET不使用HRESULT。相反,所有意外的运行时错误都产生异常。
                注册表 COM应用必须在系统注册表中注册。注册表保存了与操作系统的配置和应用程序有关的信息。NET应用不需要使用注册表,这简化了程序的安装和卸载。(但有功能类似的工具,称为全局程序集缓存—GAC)
                尽管现在不太需要编写COM代码了,但是系统中还是在使用很多COM组件,C#程序员有的时候需要编写代码来和那些组件交互

        ⑤简化的部署
            为.NET框架编写的程序进行部署比以前容易很多,原因如下:

        .NET程序不需要使用注册表注册,这意味着在最简单的情形下,一个程序只需要被复制到目标机器上便可以运行
        .NET提供一种称为并行执行的特性,允许一个DLL的不同版本在同一台机器上存在。这意味着每个可执行程序都可以访问程序生成时使用的那个版本的DLL

        ⑥类型安全性
                CLR检查并确保参数及其他数据对象的类型安全,不同编程语言编写的组件之间也没有问题
        ⑦基类库
            .NET框架提供了一个庞大的基础类库,很自然地,它被称为基类库(Base Class Library,BCL)(有时称为框架类库——Framework Class Library,FCL。)“在写自己的程序时,可以使用其中的类

        如下所示:
           通用基础类 这些类提供了一组极为强大的工具,可以应用到许多编程任务中,比如文件操作、字符串操作、安全和加密
           集合类 这些类实现了列表、字典、散列表以及位数组
           线程和同步类 这些类用于创建多线程程序
           XML类 这些类用于创建、读取以及操作XML文档

1.4编译成CIL

        .NET语言的编译器接受源代码文件,并生成名为程序集的输出文件

程序集要么是可执行的,要么是DLL
程序集里的代码并不是本机代码,而是一种名称为CIL(Common Intermediate Language,公共中间语言)的中间语言
程序集包含的信息中,包括下列项目:
        程序的CIL
        程序中使用的类型的元数据
        对其他程序集引用的元数据

编译过程
编译过程

1.5编译成当前设备的机器的并执行

        程序的CIL直到它被调用运行时才会被编译成本机代码

      检查程序集的安全待性
      在内存中分配空间
      把程序集中的可执行代码发送给实时(Just-in-Time,JIT)编译器,把其中的一部分编译成本机代码

        程序集中的可执行代码只在需要的时候由JIT编译器编译,然后它就被缓存起来以备在后来的程序中执行。使用这个方法意味着不被调用的代码不会被编译成本机代码,而且被调用到的代码只被编译一次

        一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行像释放无主内存、检查数组边界、检查参数类型和管理异當之类的任务。有两个重要的术语由此而生
                托管代码 为.NET框架编写的代码称为托管代码(managedcode),需要CLR
                非托管代码 不在CLR控制之下运行的代码,比如Win32 C/C++ DLL,称为非托管代码(unmanagedcode)

        微软公司还提供了一个称为本机映像生成器的工具Ngen,可以把一个程序集转换成当前处理器的本机代码。经过Ngen处理过的代码免除了运行时的JIT编译过程

        编译和执行
        无论原始源文件的语言是什么,都遵循同样的编译和执行过程

1.6 CLR

.NET框架的核心组件是CLR,它在操作系统的顶层,负责管理程序的执行

CLR还提供下列服务:
        自动垃圾收集
        安全和认证
        通过访问BCL得到广泛的编程功能,包括如Web服务和数据服务之类的功能

1.7 CLI

        每种编程语言都有一组内置的类型,用来表示如整数、浮点数和字符等之类的对象。过去,这些类型的特征因编程语言和平台的不同而不同。例如,组成整数的位数对于不同的语言和平台就有很大差别

        然而,这种统一性的缺乏使我们难以让使用不同语言编写的程序及库一起良好协作。为了有序协作,必须有一组标准

        CLI(Common Language Infrastructure,公共语言基础结构)就是这样一组标准,它把所有NET框架的组件连结成一个内聚的、一致的系统。它展示了系统的概念和架构,并详细说明了所有软件都必须坚持的规则和约定

        CLI和C#都已经被Ecma International批准为开放的国际标准规范。[Ecma本来是Europen Computer Manufacturer Association(欧洲计算机制造商协会)的缩写,但现在已经不是缩写了,它就是一个词。] Ecma的成员包括微软、IBM、惠普、Adobe等众多和计算机及消费性电子产品有关的公司

CLI的重要组成部分
        虽然大多数程序员不需要了解CLI规范的细节,但至少应该熟悉公共类型系统和公共语言规范的含义和用途

        公共类型系统
        CTS(Common Type System,公共类型系统)定义了那些在托管代码中一定会使用的类型的特征。CTS的一些重要方面如下:

        CTS定义了一组丰富的内置类型,以及每种类型固有的、独有的特性
        .NET兼容编程语言提供的类型通常映射到CTS中已定义的内置类型集的某一个特殊子集
        CTS最重要的特征之一是所有类型都继承自公共的基类——object
        使用CTS可以确保系统类型和用户定义类型能够被任何.NET兼容的语言所使用

        公共语言规范
        CLS(Common Language Specification,公共语言规范)详细说明了一个.NET兼容编程语言的规则、属性和行为,其主题包括数据类型、类结构和参数传递

总结下文中的缩写

程序集
        CIL(IL / MSIL)公共中间语言
公共语言运行库(CLR)
        GC 垃圾收集器
        JIT 实时编译器
        BCL 基类库
公共语言基础结构(CLI)
        CTS 公共类型系统
        CLS 公共语言规范

.NET编译和运行流程

编译和运行流程
关于.NET框架的诞生和基本原理就说到这吧


http://chatgpt.dhexx.cn/article/XNOd8TUv.shtml

相关文章

donet学习笔记7(数据库的增删改查.dataview的运用)

1.数据库前台设计:非常简单,建立一个表即可 create table person( pID varchar ( 10 ) primary key , personName varchar ( 20 ) not null , personSex varchar ( 2 ) ,) 2.前台设计: …

OpenCV学习笔记:KeyPoint和DMatch数据结构详解

近期事情太多了,课业也繁多,好久没更了,今天对OpenCV中经常用到的一些数据类型的结构进行一波分析,为自己做记录的同时也分享给大家。闲言少叙,开始操作。 一、KeyPoint 数据结构 angle //关键点的方向&#x…

The Center of Attention: Center-Keypoint Grouping via Attention for Multi-Person Pose Estimation

该论文发表于ICCV2021 本文是将Transformer应用于关键点分组的创新工作。实际上是自底向上方法中分组操作的优化,利用Transformer进行关键点分组,达到端到端训练与加快模型推理速度的效果。并且,在拥挤图像中,该方法能够拥有更好…

计算机视觉论文速递(六)GANet: A Keypoint-based Global Association Network for Lane Detection 基于关键点建模的全局关联网络

计算机视觉论文速递(六)GANet: A Keypoint-based Global Association Network for Lane Detection 基于关键点建模的全局关联网络 1. 摘要2. 方法动机3. 方法介绍3.1 车道线构建-全局关键点关联3.1.1关键点预测3.1.2 偏移量预测3.1.3 起始点采样 3.2 车道…

torchvision使用keypoint rcnn 进行人体关键点定位

系统:Windows 11 pytorch版本:1.11.0 torchvision版本:0.12.0 使用图片地址:vision/person1.jpg at main pytorch/vision GitHub 使用代码: import torch import torchvision.transforms from torchvision.model…

CenterNet: Keypoint Triplets for Object Detection

论文地址:https://arxiv.org/pdf/1904.08189.pdf 在本文中,作者将一个对象建模为一个单点,即其包围框的中心点。并使用关键点估计来找到中心点,并回归到所有其他对象属性,如大小、3D位置、方向,甚至姿势。C…

COCO数据集keypoint部分

COCO数据集总体格式如下: {"info": {...},"licenses": [...],"images": [...],"annotation": [...],"categories": [...], }coco数据集的使用: from pycocotools.coco import COCO import matplotl…

Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human

该论文发表于ECCV2022 题目:重新思考关键点表征方法:将关键点和人体姿态作为目标建模以进行多人姿态估计 Abstract In keypoint estimation tasks such as human pose estimation,heatmap-based regression is the dominant approach despite possess…

[1] A Keypoint-based Global Association Network for Lane Detection

A Keypoint-based Global Association Network for Lane Detection 0. 摘要 概括车道线检测方法: (1)基于Anchor定位的方法,自顶向下根据路线图把预设定的Anchor回归到车道线上。缺点是对复杂车道线不够灵活; &#…

cv::KeyPoint中response的介绍

1. Opencv中的KeyPoint类介绍 KeyPoint类的构造函数如下: KeyPoint(); KeyPoint(Point2f _pt, float _size, float _angle-1, float _response0, int _octave0, int _class_id-1); KeyPoint(float x, float y, float _size, float _angle-1, float _response0, int _octave0…

11种Anchor-free目标检测综述 -- Keypoint-based篇

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 导读 anchor-free目标检测算法分为两种,一种是DenseBox为代表的Dense Prediction类型,另一种则是以CornerNet为代表的Keypoint-bsaed Detection类型,以检测目标关键点为主…

SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation

动机: in this paper that predicts a 3D bounding box for each detected object by combining a single keypoint estimate with regressed 3D variables. As a second contribution, we propose a multi-step disentangling approach for constructing the 3D b…

《PCL Docs 案例详解》KeyPoint——SIFT 关键点提取

SIFT 关键点提取 本节演示如何检测点云的SIFT 关键点。SIFT 即尺度不变特征变换(Scale-invariant feature transform,SIFT) ,最初用于图像处理领域的一种描述。这种描述具有尺度不变性,可以在图像中检测出关键点,是一种局部特征描述。 完整…

OpenCV中KeyPoint类

https://blog.csdn.net/u010821666/article/details/52883580 Opencv中KeyPoint类中的默认构造函数如下: CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {} 现分析各项属性 pt(x,y):关键点的点坐标; si…

Anchor-free目标检测综述 -- Keypoint-based篇

早期目标检测研究以anchor-based为主,设定初始anchor,预测anchor的修正值,分为two-stage目标检测与one-stage目标检测,分别以Faster R-CNN和SSD作为代表。后来,有研究者觉得初始anchor的设定对准确率的影响很大&#x…

Opencv中特征点Keypoint的解读(特征点与坐标的相互转换)

Opencv中特征点Keypoint的解读 特征点的生成特征点到坐标的转换坐标到特征点的转换 在我们学习特征点检测时,使用特征点检测器,比如ORB和SIFT生成特征点(FAST和SURF好像已经申请专利,较新版本可能用不了),通常生成的特征点形式是一…

COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注

这里写自定义目录标题 COCO数据集Keypoint标注格式COCO数据集官网Keypoint Detection关键点检测统一数据格式Keypoint标注 使用COCO-Annotator标注自有数据集在Ubuntu 18.04上安装COCO-Annotator安装Docker和Docker-Compose安装COCO Annotator启动COCO Annotator使用COCO Annot…

OpenCV学习之KeyPoint

OpenCV中CV_EXPORTS类别KeyPoint与KeyPointsFilter头文件分析 用OpenCV一段时间了,说实话KeyPoint接触也算比较多,一直没有时间对其数据结构进行分析。今天打开源码对其keypoint.cpp文件进行简单分析一下:keypoint.cpp主要包含两个类KeyPoint…

ubuntu引导删除+win10引导修复

Windowsubuntu双系统,删除安装linux磁盘后没有删除其引导,删其引导的步骤为 使用快捷键winx,打开Windows PowerShell(管理员)(A),依次输入如下命令: 打开diskpart diskpart 列出系统中所有的磁盘 list disk 选择…

win10+ubuntu18.04 双系统修复ubuntu启动引导

win10ubuntu18.04 双系统修复ubuntu启动引导 因为windows是不能引导linux的,而每次win10升级或恢复都会将linux的启动引导覆盖掉,导致无法进入linux, 所以一直就禁止了win10更新.这几天win10出了点小毛病,所以就狠下心来恢复了系…