C#是一种简洁、现代、面向对象且类型安全的编程语言。是运行在.Net FarmWork 和 .Net core 之上的编程设计语言
C#开发是一种开发效率高,运行速度快,是有C语言和C++演变而来的。
Java既是一种平台,也是一种语言
.Net core近几年开发的平台,优点是可跨平台运行。编写的语言既可以在Windows平台上运行,也可以在Linux平台上运行,以及其他平台
1、C#和.net 的区别
- 就像演员和舞台,C#是演员,.Net是平台,平台给演员提供资源,也给其他演员(C++\VB等)提供场地。这名演员只能在平台上表演。但可以表演很多东西(V\B,C\B)
- 在VS上编写
2、C# 特性:
- 垃圾回收 (Garbage collection) 将自动回收不再使用 的对象所占用的内存;
- 异常处理 (exception handling) 提供了结构化和可扩展的错误检测和恢复方法;
- 类型安全 (type-safe) 的语言设计则避免了读取未初始化的变量、数组索引超出边界或执行未经检查的 类型强制转换等情形。
3、C# 具有一个同一类型系统 (unified type system)。
所有 C# 类型(包括诸如 int 和 double 之类的基元类 型)都继承于一个唯一的根类型:object。因此,所有类型都共享一组通用操作,并且任何类型的值都能够以一致的方式进行存储、传递和操作。此外,C# 同时支持用户定义的引用类型和值类型,既允对象的动态分配,也允许轻量结构的内联存储。
4、程序结构 (C# 程序由一个或多个源文件组成,程序中声明类型(类和接口等),类型包含成员(字段 (field)、方法、属性和事件是成员的示例),并且可按命名空间进行组织)
- program 程序
- namespace 命名空间
- type 类型
- member 成员
- assembly 程序集 扩展名为.dll 或 .exe,取决于是应用程序还是实用程序
- C# 源文件的扩展名通常是 .cs
5、C#中版本控制:为了解决C#和引用库之间的兼容提供了版本控制(其中包括单独使用的 virtual 和 override 修饰符、方法重载决策规则以及对显式接口成员声明的支持。 )
6、在编译 C# 程序(.cs的集合)时,它们被物理地打包为程序集。程序集通常具有文件扩展名 .exe 或 .dll,具体取决于它们是实现应用程序 (application) 还是实现库 (library)。
7、程序集包含 中间语言 (Intermediate Language, IL) 指令形式的可执行代码和元数据 (metadata) 形式的符号信息。在执行程序集之前,.NET 公共语言运行时的实时 (JIT) 编译器将程序集中的 IL 代码自动转换为特定于处理器的代码
8、引用类型和值类型
- 值类型的变量直接包含它们的数据
- 引用类型的变量存储对它们的数据的引用,后者称为对象。
- 对于引用类型,两个变量可能引用同 一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。
- 对于值类型,每个变量都有它们自己的数据副本(除 ref 和 out 参数变量外),因此对一个变量的操作不可能影响另一个变量。
9、C# 的值类型进一步划分和引用类型
- 值类型:简单类型 (simple type)、 枚举类型 (enum type)、 结构类型 (struct type) 和可以为null的类型 (nullable type),
- C# 的引用类型进一步划分为类类型 (class type)、 接口类型 (interface type)、 数组类型 (array type) 和 委托类型 (delegate type)。
在 C# 中,字符和字符串处理使用Unicode编码。char 类型表示一个 UTF-16 编码单元,string 类型 表示 UTF-16 编码单元的序列。
10、C# 程序使用类型声明 (type declaration) 创建新类型。类型声明指定新类型的名称和成员。引用类型能创建类型
- 在 C# 类型分类中,有五类是用户可定义的:类类型 (class type)、结构类型 (struct type)、接口类型 (interface type)、 枚举类型(值类型) (enum type) 和委托类型 (delegate type)。
-
类类型定义了一个包含数据成员(字段)和函数成员(方法、属性等)的数据结构。类类型支持单一继承和多态,这些是派生类可用来扩展和专用化基类的机制。
-
结构类型与类类型相似,表示一个带有数据成员和函数成员的结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。
- 接口类型定义了一个协定,作为一个公共函数成员的命名集。实现某个接口的类或结构必须提供该接口的函数成员的实现。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。
- 委托类型表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体赋值 给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的
- 类类型、结构类型、接口类型和委托类型都支持泛型,因此可以通过其他类型将其参数化
11、可以为 null 的类型(比如:var)也不必声明就可以使用。对于每个不可以为 null 的值类型 T(比如:int),都有一个相应的可以为 null 的类型 T?,该类型可以容纳附加值 null
- 比如:int? 类型可以容纳任何 32 位整数或 null 值
12、object是所有类型的基类,
13、值类型用装箱 (boxing) 和 拆箱 (unboxing) 操作来当做对象处理
- C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类
- 引用类型的值都被视为object类型,被简单的当做对象处理
当将值类型的值转换为类型 object 时,将分配一个对象实例(也称为“箱子”)以包含该值,并将值 复制到该箱子中。反过来,当将一个 object 引用强制转换为值类型时,将检查所引用的对象是否含有 正确的值类型,如果有,则将箱子中的值复制出来
来源:https://www.cnblogs.com/oceanran/p/12403322.html