C#与.NET

Wesley13
• 阅读 560

C#从本质上来说,它是一门编程语言。他不是.NET体系的一部分。虽然C#总是用来生成.NET平台的代码。C#语言不能孤立的使用,必须与.NET平台一起使用。这样才能大大提高开发效率。

相对于C++,Java等语言,C#是一种比较新的语言。它是在吸收了C++和Java语言在设计上的优点设计出来的。从一开始C#就被设计为面向对象的开发语言。

.NET Framework的核心是运行库执行环境,通常称之为公共语言运行库(CLR)。这是因为,Visual Basic以及Visual C++等都能与.NET平台做交互操作。我们把在CLR控制下运行的代码称为托管代码。在.NET中,编译代码分为两个阶段。

  1. 把代码编译为Microsoft中间语言IL。

  2. CLR把IL编译为平台专用代码。

IL是中间语言,它的优点是语法简单,可以快速的编译为相应平台所对应的代码。这样就能使得与平台无关,并且提高性能。但是目前的事实是微软还没有使得.NET实现真正的跨平台。.NET Core提供了控制台程序以及Web程序的跨平台。

IL语言总是及时编译的(称为JIT),并不是解释性的。因此相比于解释性的Java语言,它的性能是较好的。JIT每次只编译调用的那段代码,而非将整个代码编译。代码经过一次编译以后,就会被本地保存起来,下一次运行该程序这部分代码的时候,就不需要编译了。同时JIT能够获取CPU的类型,针对特定的CPU做出不同的优化。微软为IL选择了面向对象编程,并且只允许单继承。

微软在设计的时候允许多种语言在.NET平台上进行开发,它定义的交互操作的意义是:一种语言定义的类能够直接与另一种语言定义的类进行交互,这包括类之间的相互通信,类的继承,相互使用对方的实例化对象,相互调用对方的代码。微软已经实现了这种功能,但是这需要Visual Studio的支持。

IL中间语言提供的数据类型可以分为两类:值类型和引用类型。对于值类型,变量直接存储值;对于引用类型,变量仅存储地址,而对应的数据是存储在该地址之中的。引用类型总是存储在“托管堆”之中,而值类型存储在堆栈之中。

中间语言的强数据类化是指:它不允许对模糊的数据类型进行操作,例如Python语言中变量在赋值的时候,无需考虑其数据类型是什么。但在C#里,这是不行的。正是强数据类化才实现了多种语言的互操作性。

在C#中没有指针存在,无需手动释放内存。垃圾回收器是.NET用来进行内存管理的。垃圾回收器采用的方式是将所有的内存都分配到堆上。每隔一段时间,当.NET检测到指定进程的托管堆已满的时候,就会调用垃圾回收器。垃圾回收器就会检测目前代码中所有的对象的引用计数,引用计数为0的对象就会被回收。需要注意的是,垃圾回收机制是不能和C++这样的非托管代码一起使用的。

本文同步分享在 博客“zy010101”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java 概述
Java概述Java编程语言是一种通用的、并行的、基于类的、面向对象的语言。它被设计得非常简单,这样程序员可以在该语言上流畅的交流。Java编程语言与C和C有关联,但组织却截然不同,其中也省略了其他语言的一些用法,比如指针。它的目的是作为一个生产性语言,而不是一个研究性语言,因此,在设计上避免了包括新的和未经考验的功能。
Stella981 Stella981
2年前
Python服务器开发一:python基础
Python(蟒蛇)是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.NET开发平台上使用。【特点】1Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。2Python具有很强的面向对象特性,而且简化了面向对象的实现。它消除了保护类型、抽象类、
Stella981 Stella981
2年前
Sentinel 1.7.2 发布,完善开源生态及扩展性
多样化的适配模块到目前为止,Sentinel已覆盖微服务、APIGateway和ServiceMesh三大板块的核心生态,同时多语言已推出Java、C、Go三种语言的原生实现。!78636450_ef3a4b00_78da_11ea_89ce_c7a2b58c2deb(https://yqfile.alicd
Wesley13 Wesley13
2年前
Objective
一、基本概念ObjectiveC(简称OC)是iOS开发的核心语言,苹果公司在维护,在开发过程中也会配合着使用C语言、C,OC主要负责UI界面,C语言、C可用于图形处理。C语言是面向过程的语言,OC是在C语言基础上加上了一层面向对象的语法(将复杂面向对象语法去掉了)。我们可以使用OC开发MacOSX平台和IOS平台的应用程序。2
Wesley13 Wesley13
2年前
Java学习路线图
JavaJava是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立
Wesley13 Wesley13
2年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
金旋 金旋
2个月前
最新C#.NET5从0基础到精通 60课【课件+源码】
//下仔のke:https://yeziit.cn/13659/C(CSharp)是一种面向对象的编程语言,由微软(Microsoft)开发,它是.NET框架的主要编程语言之一。C结合了C的强大功能和Java的易用性,旨在成为一种“高级、类型安全、面向
笑面虎 笑面虎
1个月前
C#+PLC通讯框架串口网口开发课程
CPLC通讯框架串口网口开发课程C是面向对象的、面向组件的编程语言。C提供了语言构造来直接支持这些概念,让C成为一种非常自然的语言,可用于创建和使用软件组件。自诞生之日起,C就添加了支持新工作负载和新兴软件设计实践的功能。C本质上是面向对象的语言。你需要