前些日子,在网上加了一个关于C#的学术群,里面的验证消息就是请说明C#与.NET之间的关系。于是便在网上找了一些资料,详细说一说C#和.NET。
C#
C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,bin定于在微软职业开发者论坛上亮相的。C#看起来和Java有着惊人的相似;他包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码在运行的过程,但是C#与Java又有着明显的不同,它借鉴了Delphi的 一个特点,与COM(组件对象模型)是直接集成的,而它是微软公司.NET windows网络框架的主角。
C#是一种编译语言,不是脚本语言。脚本语言不会被编译,而只是逐条语句读取并进行解释(读取一条语句,翻译成机器吗或者虚拟机码并立即执行,一条指令有可能翻译成多条机器指令),这对于像javascript这样的东西很有用,但是当对性能有要求时,编译语言就是可行的方法。
C#的特点在于束河初学者入门,容易上手。C#就其本身而言只是一种语言,尽管他是用于生成面向.NET环境的代码,但它本身不是.NET的一部分。.NET支持的一些特性,C#并不支持。而C#语言支持的另一些特性,.NET却不支持(如运算符重载)。
C#的优点
相比Java,有更先进的语法体系。
由于C#是后生,所以其很多语法都是其他语言的改进。作为一个商业产品,C++用户是C#的首要目标,所以它充分照顾到了C++用户的习惯。从整体看,C#语法比Java语法更优雅。
强大的周边
C#的IDE功能非常强大,C#3的文档有包含中文的多国语言,C#所需要的运行平台在用户量极大的windows上内置。一切的一切都在向我们诉说,C#有一个强大的爹。同时也说明,C#不仅仅是一个语言,更是一个极具匠心的产品。所以,用户可以享受这个产品的各个功能,包括售后服务。
C#的缺点
它是一个产品
作为微软的产品,它不能帮助竞争者——其他操作系统。作为微软的产品,它必须追求稳定、严谨、而不要出现任何错误。
C#团队实力确实非常强大,导致C#不会出现任何一个低级错误,就连 if(a = false) 这样的代码都会出现一个警告。C#的语法、底层库也无时不刻在印证一个理念:我们做的是产品,我们必须保证产品根据我们所期望的工作,而不允许出现任何错误。
这是一个优点,也是一个缺点。
没有考虑代码量。
在C#中,文档注释需求书写xml,但是文档注释确实不能继承的——用户必须手动为每个函数和重载添加注释。C#的很多常用的工具类因为其使用的局限性而不被公开。
.NET
.NET开发平台
,NET有三个版本:.NET Framework,.NET Core和Xamarin。这些实现组合称为.NET开发平台。它们中的每一个都包含用于构建各种应用程序和库。
.NET框架
.NET Framework是该平台的第一个也是最早的实现。它包括三个主要的应用程序模型-WPF,Windows窗体,ASP.NET窗体-和基类库。
Windows Presentation Foundation(WPF)是一个UI框架,用于主要为Windows操作系统上的桌面客户端应用程序创建图形界面。WPF使用可扩展应用程序标记语言(XAML)的功能。
Windows Forms是.NET Framework中的GUI类库。Windows窗体用于开发具有易于更新和部署的丰富图形的桌面应用程序。
ASP.NET。虽然前两个组件是为桌面工程设计的,但ASP.NET用于开发动态网站和Wed应用程序。其核心中有公共语言运行时(CLR),使用开发人员有机会使用不同的.NET语言编写ASP.NET代码。公共语言运行时是一个应用程序虚拟机,它管理内存,实现代码访问安全性,验证代码安全性,并提供线程和代码的执行。
基类库(BCL)提供最常见的功能,如命名空间中的类,是框架类库(FCL)的核心,它是一组可重用的接口,类和值类型,与公共语言运行时(CRL)紧密集成)。FCL和CLR的组合构成了.NET Framework。
由于.NET Framework仅支持基于Windows的设备,因此需要发生跨平台程序包。
.NET是个平台,理论上,各种语言都可以编译成它的IL,在上面运行。,NET开发,就是把它当做目标平台的开发。
然而实际上,.NET上还分了阶级。C#是全能的亲儿子,ASP/VB/F#是能力较弱的亲儿子,其他语言那是干儿子或者过继的。所以实际中,你可以认为就是在搞C#了。
所以说,.NET上所有语言都是平等的,但有些语言比另一些更平等一些。
.NET的优点:
面向对象编程:.NET Framework和C#从一开始就完全基于面向对象的原则。
优秀的设计:一个基类库,它以一种非常直观的方式设计出来。
语言无关性:在.NET中,Visual Basic、C#和托管C++等语言都可以编译为通用的中间语言(Intermediate Language)。这说明,语言可以用以前没有的方法交互操作。
对动态Wed页面的更好支持:虽然经典ASP具有很大的灵活性,但效率不是很高,这是因为它使用了解释性的脚本语言,且缺乏面向对象的设计,从而导致ASP代码比较混乱。.NET使用ASP.NET,为Wed页面提供了一种集成支持。使用ASP.NET,可以编译页面中的代码,这些代码还可以使用.NET能识别的高级语言来编写。
高效的数据访问:一组.NET组件,统称为ADD.NET,提供了对关系数据库和各种数据源的高效访问。这些组件也可用于访问文件系统和目录。尤其是,.NET内置了XML支持,可以处理从非Windows平台导入或导出的数据。
代码共享:.NET引入了程序集的概念,替代了传统的DLL,可以完美无瑕地改进代码在应用程序之间的共享方式。程序集是解决版本冲突的正式设备,程序集的不同版本可以并存。
增强的安全性:每个程序集还可以包含内置的安全信息,这些信息可以准确地指出哪种类型的用户进程可以调用什么类的哪些方法。这样就可以非常准确地控制用户部署的使用方式。
对于安装没有任何影响:有两个种类型的程序集,分别是共享程序集和私有程序集。共享程序集是可用于所有软件的公共库,而私有程序集只用于特殊软件。由于私有程序以及完全自包含,因此安装过程非常简单。没有注册表项,只需要把相应的文件放在文件系统的相应文件夹中即可。
Wed服务的支持:.NET完全集成了对开发Wed服务的支持,用户可以轻松地开发在任何类型的应用程序。
.NET开发的缺点
尽管由于广泛的基础架构和成熟的产品开发历史,.NET被认为是最强大的工程平台之一,但它带来了一系列问题。
有限的对象关系支持
.NET使用面向对象编程(OOP)语言模型。该模型基于对象的“动作”和数据而不是逻辑。实体框架提供了.NET Framework中面向数据的软件程序开发的支持。
实体是一种对象关系映射器(ORM),它在面向对象的.NET Framework和关系(SQL)数据库之间架起桥梁。一些工程师认为实体框架不够灵活,可能不支持所有可用的数据库设计。这也意味着在某些时候实体框架可能不支持新的数据库设计。
供应商锁定
第二个缺点部分与前一个有关。.NET运行并基于Microsoft。虽然.NET Core和Xamarin是开源的,但整个生态系统远非社区驱动。这意味着你的产品仍然依赖于Microsoft提供的供应商和决策。
许可费用
无论开源技术如何,构建.NET应用程序并不便宜。大多数情况下,你的开支将用于Visual Studio IDE以及Microsoft提供的其他协作和质量保证服务,以简化你的工作。你可以尝试成为Microsoft合作伙伴,免费获得许多订阅。处于非营利和教育目的,还有免费的Visual Studio社区。
释放与稳定之间的差距
也许这个问题削弱了所有Microsoft产品而不是.NET堆栈。但它绝对值得一提。新发布的产品缺乏适当的文档,支持,稳定性,并且容易产生剧烈变化。
较小的缺点包括由于封闭系统中的垃圾收集而发生的性能问题。而且,通常,托管环境比直接与硬件通信的环境要慢。
C#与.NET的关系
C#本身是一门语言,它是用于生成面向.NET环境的代码,但其并不是.NET的一部分。换言之,C#编写的代码总是运行在.NET Framework中。而且,在很多时候,C#的特定功能依赖于.NET。比如,在C#中声明一个int类型,实际上是.NET中System.Int32类的一个实例。
它是专门为与Microsoft的.NET Framework一起使用而设计的。
C#就其本身而言是一种语言,尽管它是用于生成面向.NET环境的代码,但它本身不是.NET的一部分。.NET支持的一些特性,C#并不支持。而C#语言支持的另一些特性,.NET却不支持(例如运算符重载)。