菜鸟之旅——初识.NET
入坑.Net 也已经两年多了,既然在微软.Net 体系下混,对.Net 体系也需要了解一下,当然这些知识也都是查阅资料都能够查到的,这里主要是对自己所学的整理,况且最近的学习有些闭门造车的味道,现在想写出来和大家分享一下,如果理解有偏差,欢迎园友指正!
.Net Framework经历了很多版本的变更,但是它的框架没有太大的变化,包括了公共语言运行时(CLR)、基类库和.Net Framework类库、公共语言规范和支持的语言;

公共语言运行时(CLR)
CLR是.Net Framework的基础内容,也是.Net程序的运行环境,可以将其看作一个在执行时管理代码的代理,它提供了内存管理、线程管理、代码执行、垃圾收集(GC)和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。
C#或者其它各种语言编写的源代码通过编译器生成IL代码托管(IL也称托管代码),最后得到一个托管模块,一个或多个托管模块组成程序集(assembly)交给CLR运行,但是CLR还是不能直接和操作系统(OS)直接交互,还需要JIT引擎来进行“翻译”,变成计算机可以识别的二进制代码交给操作系统执行。
对了这里提到了CLR就不得不提到托管代码和非托管代码:
托管代码 (managed code)是由CLR(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全 性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。
非托管代码 (unmanaged code)是指在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
基类库和.Net Framework
基类库(NET Standard Library)包含支持底层操作的一系列通用功能,覆盖了集合操作、线程支持、代码生成、输入输出(IO)、映射和安全等领域的内容。另外,.Net Core也是基类库的实现,当然也有自己独特的实现,并且与.Net Framework不同,它是支持跨平台的,详细学习会在后续的博客中分享。
.Net Framework是基类库在windows操作系统下的实现,包含类库:数据库访问(ADO .NET等)、XML支持、目录服务(LDAP等)、正则表达式和消息支持;并且还实现很多我们开发人员平常使用的应用程序开发技术:ASP .NET技术、WinFroms技术和WPF技术等高级编程技术。
公共语言规范
很遗憾,我对这公共语言规范(CLS)也不了解,也只能说说大概。
.Net支持很多语言,有C#、VB等,每种语言必定带着自己的特性,但是大家都能够通过编译在CLR上面跑,并且都可以与其他语言进行互操作,这都是因为所有语言都遵守了CLS;.NET Framework将CLS定义为一组规则,所有.NET语言都应该遵循此规则才能创建与其他语言可互操作的应用程序,但要注意的是为了使各语言可以互操作,只能使用CLS所列出的功能对象,这些功能统称为与CLS兼容的功能。再往下的细节实现就不知道了,把这个也列在今后的学习计划当中吧。
总结
本篇博客就写到这吧,内容也大都是园子里内容,也希望能够帮助到想入坑.Net的朋友们。
菜鸟之旅——初识.NET的更多相关文章
- CentOS6.5菜鸟之旅:U盘安装CentOS64位
一.前言 之前下载了个CentOS7 32位版,一下就安装成功了,但由于其目录结构等与之前的CentOS版本有很大的不同,加上教程不多不利于我这种菜鸟学习,于是决定重装CentOS6.5来学习.本篇用 ...
- CentOS6.5菜鸟之旅:文件权限详解
一.前言 Linux下所有资源.设备均被视作文件来操作,而文件权限则是决定用户可各文件操作的范围,无论是平时使用Linux,还是写程序均涉及这方面.以下为个人学习的整理,供以后查阅. 二. 三种权限 ...
- CentOS6.5菜鸟之旅:关于搜索的shell命令
一.locate命令 用于模糊搜索文件(目录)的绝对路径. 示例1: // 凡是绝对路径当中含jdk字符串的文件(目录)均被搜索出来 fsjohnhuang@fsjohnhuang~# locate ...
- CentOS6.5菜鸟之旅:安装SUN JDK1.7和Tomcat7
一.前言 CentOS6.5系统自带Open JDK1.7.1.6和1.5,但OpenJDK部分内容与SUN JDK不兼容,因此打算重新安装SUN JDK1.7来开发. 二.卸载Open JDK ...
- CentOS6.5菜鸟之旅:VirtualBox4.3识别USB设备
一.前言 VirtualBox默认是不能识别USB设备的,但可以通过Oracle VM VirtualBox Extension Pack来增强VirtualBox的功能,增强的功能如下: 1. US ...
- CentOS6.5菜鸟之旅:安装VirtualBox4.3
一.下载VirtualBox的RHEL软件库配置文件 cd /etc/yum.repos.d wget http://download.virtualbox.org/virtualbox/rpm/rh ...
- CentOS6.5菜鸟之旅:识别NTFS分区
一.前言 CentOS默认时不能识别NTFS分区的,需要那么需要安装fuse-ntfs-3g来处理了. 二.安装fuse-ntfs-3g yum install fuse-ntfs-3g
- CentOS6.5菜鸟之旅:安装rpmforge软件库
一.rpmforge软件库 rpmforge是包含4000多种CentOS软件的软件库,被CentOS社区认为是安全和稳定的软件库. 二.安装rpmforege 1. 在http:/ ...
- CentOS6.5菜鸟之旅:VIM插件NERDtree初探
一.介绍 用于浏览目录结构的插件,功能和windows的资源管理器类似. 二.安装过程 1. 下载插件(https://github.com/scrooloose/nerdtree) 2. 将文件复制 ...
随机推荐
- 如何利用panel在一个窗口中实现诸多页面的显示
Book_register form11 = new Book_register();//new一个对象 form11.TopLevel = false;//去除子窗体的顶级窗体设置 form11.P ...
- php使用rc4加密算法
/** * rc4加密算法,解密方法直接再一次加密就是解密 * @param [type] $data 要加密的数据 * @param [type] $pwd 加密使用的key * @retur ...
- 最近整理AI相关感想
前言 目前笔者致力于 在AI 开发研究,四大平台里,百度AI 提供 的开发者资料是最全,开发的友好度也是最高的,很多都已经集成在SDK中,支持许多语言体系. 其实 作为公司层面的考虑,针对技术的研究出 ...
- [置顶]
spring集成mina 实现消息推送以及转发
spring集成mina: 在学习mina这块时,在网上找了很多资料,只有一些demo,只能实现客户端向服务端发送消息.建立长连接之类.但是实际上在项目中,并不简单实现这些,还有业务逻辑之类的处理以及 ...
- maven项目pom.xml配置文件依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- TCP程序中发送和接收数据
这里我们来探讨一下在网络编程过程中,有关read/write 或者send/recv的使用细节.这里有关常用的阻塞/非阻塞的解释在网上有很多很好的例子,这里就不说了,还有errno ==EAGAIN ...
- 在CentOS上为Docker开启SELinux
a { color: #4183C4; text-decoration: none } a:hover { text-decoration: underline } ul,ol { padding-l ...
- Linxu服务器上安装JDK小白教程
一.环境 VMware12 Pro CentOS-6.7-i386-bin-DVD1 jdk-8u151-linux-i586 二.详细安装步骤 前提:需要卸载自己Linux上的jdk rpm -qa ...
- js图片懒加载(滚动加载)是否生效
一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...
- Linux定义变量的脚本
现有两段基本一样的代码,只是变量进行改变,其他都没有变化,但是执行过程中出现了不一样的结果 代码一: vi back.sh #backup import file,such as /etc/rc.lo ...