C#与.NET

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++这样的非托管代码一起使用的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券