​.NET 概念比较庞大,本文只讨论基础知识,只用简单语言描述。

我们是NET程序员,但是我们有没有思考过到底什么是.NET ?

官方定义 .NET是微软推出来的一个致力于敏捷开发的软件框架。

大概2000年年左右,微软推出了.NET 标准规范,既然有了标准就等于开发时候定义接口一样,需要东西去实现它。.NET Framework  就是 .NET 的具体实现。

可以这么认为 .NET一种优秀的设计规范和平台标准。

下面我们来说说什么是 .NET Framework?

官方定义 .NET Framework  是 Windows 的托管执行环境,可为其运行的应用提供各种服务。

.NET Framework 有两个主要组件:

1. .NET 公共语言运行时 (Common Language Runtime,CLR)

CLR核心功能:内存管理,程序集加载,安全性,异常处理,和线程同步,CLR像一个管家一样,管理着程序代码的执行,为程序提供一个运行环境。被CLR托管的代码就叫托管代码。

要想了解CLR机制,就要知道我们写的C#代码经过VS 编译之后变成了什么?

左边的图是将我们编写的C#源代码编译成托管模块,右边图是托管模块的组成部分,这里我们只关注IL代码,其他的不用关注。C#代码经过编译器生成的并不是最终的CUP指令,而是一个中间语言IL代码,也就是托管代码,CLR操作的就是IL代码,最终由CLR将IL编译成计算机可以认识的Cpu指令。我们应该知道程序运行时候需要占用计算机的内存,C++时代的的程序员是需要自己手动操作管理内存的,需要自己分配和释放内存。但是我们.NET程序员是不需要进行这个操作的。这是因为CLR帮我们自动做分配内存和释放内存的这个操作了。这个操作对于NET开发者来说是透明的,这就是文章的前面所说CLR的主要功能内存管理。由CLR管理释放的内存空间叫做托管堆。在托管堆上的代码称之为安全代码也叫托管代码,反之不在托管堆上的代码就叫非托管代码,非托管代码有可能造成内存泄漏。

CLR是很复杂的一个东西。本文不做过多的讨论,只是对其概念进行简单的讲解。

2.  Framework 类库 

.NET Framework类库应该比较好理解,类似我们自己封装工具类一样的概念。Framework 类库 (Framework Class Library) 简称 FCL,FCL 里面定义了数千个类型供我们用。利用这些类型我们可以开发各种类型的应用程序 webService,MVC,Windows Forms ,WPF,Windows 服务等。所以要想学好.NET的,虽然不需要你都掌握整个.NET类库。这也不现实,但是也要尽可能掌握常用的类型。

总结

.NET Framework是.NET平台标准的主要的实现,实现的不仅仅有.NET Framework还有.NET Core和mono。

.NET Framework包含CLR和 FCL。

CLR为.NET程序提供一个运行环境并对其进行托管。

FCL Framework类库为.NET程序员提供了大量丰富的基础类型供其使用。封装了一些基础的操作,为了.NET程序员的开发提供了便利。

 ps:文章乃个人学习笔记。大神勿喷。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

到底什么是.NET?的更多相关文章

  1. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  2. Js new到底发生了什么

    在Js中,我们使用了new关键字来进行实例化 那么在这个new的过程中到底发生了什么? 关于构造函数的return 正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象. 但是, ...

  3. 电信计费业务:预后融合OCS到底应该实扣还是虚扣?

    引入OCS的初衷之一是为了让计费系统能够参与到用户的通讯控制中来,也就是所谓的实时信控.用户在没有余额时,通讯就会被停止,不会造成"天价欠费 ",一方面保障用户的利益,一方面也保障 ...

  4. 港真,到底应该选择OA还是BPM?

    越来越多企业意识到流程管理的重要性,但是,选择OA还是BPM,却让他们产生了选择困难症. 一方面,企业皆注重流程的高效运转,最好内外部的业务都能用一个系统来解决.所有流程一天就能上线什么的,那就更好啦 ...

  5. 四、可空类型Nullable<T>到底是什么鬼

    值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类型变量都是保存一个对象的地址引用(就像一个url对应一个页面),而 ...

  6. 在开发中到底要不要用var?

    var是.net的一个语法糖,在Resharper中推荐都使用这个关键字,平常我也是经常用:但是在跟其他程序员推广使用时,他的一些考虑引发了我的深思,到底该不该使用这个关键字呢? 我使用的理由 我使用 ...

  7. 阿里的weex框架到底是什么

    title: 阿里的weex框架到底是什么 date: 2016-09-27 10:22:34 tags: vue, weex category: 技术总结 --- weex 工作原理 首先看下官方的 ...

  8. 全局变量 HInstance 到底是在什么时候赋值的?

    在学习 资源文件 和 钩子函数 时, 经常用到当前模块句柄(HInstance)这个全局变量. 今天特别想知道, 它到底是在什么时候给赋值的. 输入 HInstance; "Ctrl+鼠标& ...

  9. 从问题看本质:socket到底是什么?

    一.问题的引入——socket的引入是为了解决不同计算机间进程间通信的问题 1.socket与进程的关系 1).socket与进程间的关系:socket   用来让一个进程和其他的进程互通信息(IPC ...

  10. char varchar nchar nvarcharar到底有多大区别

    首先说明下,ASP.NET MVC系列还在龟速翻译中. 工作好多年,基础知识甚是薄弱,决定以后在coding(cv操作)的时候尽量多google下,然后总结下来,目的有三:     1. 加深自己的理 ...

随机推荐

  1. 用python制作训练集和测试集的图片名列表文本

    # -*- coding: utf-8 -*- from pathlib import Path #从pathlib中导入Path import os import fileinput import ...

  2. NLP(二十一)人物关系抽取的一次实战

      去年,笔者写过一篇文章利用关系抽取构建知识图谱的一次尝试,试图用现在的深度学习办法去做开放领域的关系抽取,但是遗憾的是,目前在开放领域的关系抽取,还没有成熟的解决方案和模型.当时的文章仅作为笔者的 ...

  3. 本地linux搭建的WordPress升级时需要输入FTP信息

    转自:https://blog.csdn.net/weixin_43837883/article/details/88751871 这是因为目录权限不正确所致 解决方法: 1.使用命令chown -R ...

  4. css3 动画 示例

    /* animation */ .a-bounce,.a-flip,.a-flash,.a-shake,.a-swing,.a-wobble,.a-ring{-webkit-animation:1s ...

  5. 接入谷歌广告错误(主要Adsense)

    接入谷歌广告 1. 谷歌初始化完会有透明占位,记得隐藏防止下方游戏无法点击 2. 测试的广告域名似乎需要https和www才能播放adsense视频广告 3. 谷歌广告1009错误,广告id或者账号i ...

  6. Mybatis随记(一)update动态SQL

    <update id="updateUser"> UPDATE user_info SET <if test="gzhOpenId != null an ...

  7. (数据科学学习手札77)基于geopandas的空间数据分析——文件IO

    本文对应代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的 ...

  8. mac item2的快捷键

    https://juejin.im/entry/58fac23fb123db4449071c99 听说这个工具可以解决,iterm2的整句翻译的问题.一致找不到免费的破解版本. Myna for Go ...

  9. Objective-C编程 — 类和继承

    讲述面向对象中的一个重要概念——继承,使用继承 可以方便地在已有类的基础上进行扩展,定义一个具有父 类全部功能的新类. 父类和子类 我们在定义一个新类的时候,经常会遇到要定义的新类是某个类的扩展或者是 ...

  10. SVN状态图标不显示的解决办法

    第一步:检查设置 右键->TortoiseSVN->setting->Icon Overlays->Status cache->default/Shell.或者 右键-& ...