C#第一节

淺唱寂寞╮ 提交于 2020-03-03 17:24:05

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 引用强制转换为值类型时,将检查所引用的对象是否含有 正确的值类型,如果有,则将箱子中的值复制出来

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!