C#与.Net

最近用C#开发一套独立的编辑器,使用WPF界面框架,引入了Telerik界面库。后来为了让处理数据的逻辑能跨平台运行又创建了一个.Net Core的console app来完成这部分独立的功能。做Unity开发的时候也知道mono可以支持C#代码的跨平台运行,在此打算把C#生态涉及到的各种概念梳理一下。包括C#、.Net、.Net Framework、.NetCore、.Net Standard、mono、MAUI、WPF、Telerik、CIL、CLR、ECMA标准等等。

最初C#是微软推出的基于.Net Framewok的编程语言。C#与Java一样是托管语言,通过编译器生成中间语言 CIL( Common Intermediate Language ),再在运行时由中间语言运行时库CLR( Common Language Runtime)翻译执行并调用对应系统的API来工作。因为C#语法比较接近C/C++,但具有托管语言的优势(内存管理,异常机制等),很快流行起来。但当初的.Net Framework只支持Windows平台,就有公司及开源社区希望能让C#跨平台运行,这就是mono的出现。此后C#语言就不再是微软自家的产品了,需要有统一的标准。关于C#语言及C#编译出来的中间语言CIL的标准由欧洲计算机协会ECMA(European Computer Manufacturers Association)制定。

微软最初希望Windows一家独大,所以一直不搞跨平台,但随着mono的蓬勃发展,微软终于也开窍打算搞跨平台了,于是推出了.Net Core。.Net Framework、.Net Core、.Net Standard 的关系如下。

如果你希望创建一个带界面的Windows应用,就应该用.Net Framework,如果你希望创建一个能跨平台运行的console应用,就应该使用.Net Core,如果你希望把一些公共逻辑抽成dll给.Net Framework与.Net Core共享使用,就应该使用.Net Standard。

随着.Net Core的推展,微软希望未来跨平台能跑的不仅限于console应用,未来会将各种界面控件及其他功能都搬到一个更大的跨平台框架上来,于是又推出了.Net 5.0

.Net Core在 3.1的LTS推出后就不再延续,在2020年又搞了.Net 5.0,但也只是支持console应用及web应用。WPF WinForm 这些界面框架与Windows耦合太深是无法搬到跨平台的.Net 上了。于是在.Net 6.0 又推出了一套夸平台界面控件库MAUI ( Multi-platform App UI ),如果MAUI能搞起来的话,未来.Net跨平台开发会有很大的市场前景,但目前MAUI貌似并没有太大进展。

至于WPF就不用多说了,相信做Windows界面应用的都不会陌生。推荐一下Telerik的WPF控件库,扩展了非常多好用的控件。有与Excel类似的整套表格控件(RadSpreadSheet),与Word类似的文本浏览编辑控件(RadPdfViewer),与VS类似的子窗体自由拖拽停靠控件(RadDocking),与SpaceSniffer类似的块状细分控件(RadTreeMap)等等。需要做Windows界面应用的建议可以把Telerik的控件库都先看一遍,会有各种惊喜发现。

Tagged , , , . Bookmark the permalink.

Comments are closed.