从java到C#(一) 语言特性

214 阅读3分钟

C#的语言特点

它是一种强类型的,面向对象的编程语言,它会编译成托管代码,运行时使用即时编译(JIT Just In Time),来动态编译代码。 分段解释如下:

  • 强类型
  1. 类型安全:强类型语言在编译时可以进行类型检查,确保变量或表达式的类型正确。这样可以减少在运行时出现类型错误的风险,提高程序的可靠性和稳定性。
  2. 代码可读性和可维护性:强类型语言要求开发人员在代码中明确指定数据类型,这有助于提高代码的可读性和可维护性。因为数据类型是显式的,所以其他开发人员可以更容易地理解代码并对其进行修改和维护。 总而言之,强类型就是用性能开销方面的劣势(在转型时做类型检查等),换取更好的安全性和可读性。
  • 面向对象 和java一样,有面向对象的三个基本特征:封装、继承、多态; 封装:隐藏实现细节,将属性和动作(方法)隐藏在类的内部,这样可以提高代码的安全性。 继承:通过继承增强代码的扩展性,避免很多重复代码的编写。 多态:面向接口编程(不应过多关注接口的内部实现,更关注接口之间的协作关系),同一套接口对应多种不同的实现,增加了代码的灵活性。
  • 编译运行过程 源代码 → C# 编译器(比如微软的csc.exe 或者dotNetCore框架的compile) → CLI(Common Intermediate Language,通用中间语言类似汇编) → 将CIL打包成为程序集(dll或者exe) → 运行程序集(dotNetFramework等框架) 加载并解释成平台机器码并执行(体现了跨平台性) tips 为什么要这样做? 增加了复杂性,影响了初次执行的性能,但是,托管程序消耗的内存更少。只有被执行的代码会被编译,且编译时会高度优化源码。 类比java:java会将源码通过jdk编译成字节码(中间语言)。然后字节码放到不同平台的jvm(java虚拟机,体现了跨平台性,一次编译,到处运行,只要有jvm)中执行。
  • 元数据的概念 与C++不同,代码中不包含有任何的头文件,不需要使用头文件来进行类之间的链接。使用可扩展的元数据,交由托管模块来处理。元数据描述了程序集中的类型(包括类、接口、结构、枚举等)、成员方法、属性等信息,使得程序集可以在没有外部附加信息的情况下被正确地加载和解析。TIps 避免了头文件和库文件(dll或者静态库)不一致导致的错误。 java也没有头文件的概念,为什么? 在C和C++中,头文件被用来声明函数和变量的原型、类型定义以及预处理器指令等。编译器在编译源文件时需要这些信息来正确地处理代码。然后,链接器将这些源文件和头文件生成的目标文件链接在一起,形成一个可执行文件。而在Java中,编译器会将源代码编译成字节码文件(以.class为扩展名),这些字节码文件包含了Java虚拟机(JVM)可以理解的指令。Java虚拟机在运行时会自动加载和链接这些字节码文件,因此不需要头文件来链接代码(by Chatgpt)