开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3536|回复: 0
收起左侧

[C#图文教程] .NET Framework简介,进阶,新手帖

[复制链接]
发表于 2019-7-5 21:22:06 | 显示全部楼层 |阅读模式   上海市上海市
一般软件的运行场景,客户端电脑需要安装.net framework
CLR叫公共语言运行时或公共语言运行库,以及.net framework类库
CLR是.net framework的核心
CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称:公共语言运行库和公共语言运行时。

CLR的执行过程
       1、将源代码(vb、cs)编译成 托管代码块。托管代码块由中间语言和元数据组成。
  2、将托管代码合并成程序集,也叫组件(dll)。程序集中包含了一张叫做“清单”的模块,
            记录了构成程序 集模块构成的信息包括资源文件及需要引用自己的信息。
  3、加载公共语言运行库。
  4、执行程序集的代码。
  5、生成本地代码。

----
CTS全称Common Type System是通用类型系统一种确定公共语言运行库如何定义、使用和管理类型的规范。
CLR通过CTS(通用类型系统),实现严格的类型和代码验证,来增强代码鲁棒性。
CTS 确保所有托管代码是自我描述的。
各种Microsoft编译器和第三方语言编译器都可生成符合CTS的托管代码。
这意味着,托管代码可在严格实施类型保真和类型安全的同时,使用其他托管类型和实例。
---
CLS是公共语言定义(Common Language Specification)
公共语言运行库支持的语言功能的子集,包括几种面向对象的编程语言的通用功能。符合 CLS 的组件和工具能够保证与其他符合 CLS 的组件和工具交互操作。
--
CLI又叫作公共语言基础架构(Common Language Infrastructure)
CLI是一种规范,CLR是对规范的一个实现
--
BCL叫作基础类库(Base Class Library)
BCL是一个公共编程框架,称为基类库,所有语言的开发者都能利用它
----
FCL叫作框架类库(Framework Class Library)
FCL提供了大粒度的编程框架,它是针对不同应用设计的框架 ,FCL大部分实现都引用了BCL,例如我们常说的开发框架:ASP.NET、MVC、WCF和WPF等等,提供了针对不同层面的编程框架 。
---
托管代码就是Visual Basic .NET和C#编译器编译出来的代码,托管代码在公共语言运行库(CLR)中运行
非托管代码是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务


托管和非托管的区别
     1、托管代码是一种中间语言,运行在CLR上;
          非托管代码被编译为机器码,运行在机器上。
     2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;
          非托管代码依赖于平台和语言。
     3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;
          非托管代码需要自己提供安全检测、垃圾回收等操作。

非托管代码的使用方法
unsafe是非托管代码的关键字
可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量
运行unsafe ,需要设置:
  单击“配置属性”文件夹。     
  单击“生成”属性页。     
  修改“允许不安全代码块”属性

非托管代码的语法是
unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
     //可以使用指针
}

Unsafe
{
     //可以使用指针
}
---
GC(Garbage Collector)如其名,就是垃圾收集,这里仅就内存而言。Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象,通过识别它们是否被引用来确定哪些对象是已经死亡的哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。

GC 类 控制系统垃圾回收器(一种自动回收未使用内存的服务)。
GC 会跟踪托管内存中分配的对象,并且定期执行垃圾回收.当使用内存不能满足内容请求时,GC回收会自动进行,也可以使用Collect方法强制进行垃圾回收
.NET的GC机制两个问题:
  首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。
  第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性
GC的好处
{
为什么要使用GC呢?也可以说是为什么要使用内存自动管理?有下面的几个原因:
l          提高了软件开发的抽象度;
l          程序员可以将精力集中在实际的问题上而不用分心来管理内存的问题;
l          可以使模块的接口更加的清晰,减小模块间的偶合;
l          大大减少了内存人为管理不当所带来的Bug;
l          使内存管理更加高效。
总的说来就是GC可以使程序员可以从复杂的内存问题中摆脱出来,从而提高了软件开发的速度、质量和安全性。

}

GC.Collect()方法,作用是强制进行垃圾回收,一般用于特殊情况
----
元数据:是一种二进制信息
元数据存储以下信息:
程序集的说明
类型的说明
属性
-----
.NET Framework 编译时和运行时
运行流程就是
源码->编译器->程序集->JIT编译器(就是公共语言运行库CLR)->本机代码->操作系统服务
--
程序集指的是DLL、EXE文件
是包含一个或者多个类型定义文件和资源文件的集合。在程序集包含的所有文件中,有一个文件用于 保存清单。
(清单是元数据部分中一组数据表的集合,其中包含了程序集中一部分文件的名称,描述了程序集的 版本,语言文化,发布者,共有导出类型,以及组成该程序集的所有文件)。

由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为·dll或者是·exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行。

:程序集的说明
--
JIT  (Just in time)即时编译器

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表