C#学习笔记之数据结构、变量和常量

1.数据类型

(1)类型系统
(2)值类型
(3)引用类型
(4)装箱和拆箱
C#中所有的类型都继承于System.Object根类型,而所有的值类型都继承于System.ValueType类型。通过装箱和拆箱机制,可以实现值类型和引用类型之间的转换。
装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于托管堆中。
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。注意,装箱操作可以隐式进行,但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看其值是否为给定值类型的装箱值;然后,把这个对象实例的值复制给值类型的变量。
装箱转换把值类型转换为引用类型后,可以方便调用相应对象实现的方法。值得注意的是,装箱和拆箱操作,会导致额外的系统内存配置开销。
(5)预定义数据类型

2. 值类型和引用类型

(1)值类型

  • 简单类型(Simple type):
    整形
    浮点型
    十进制型(decimal)
    布尔型(bool)
    字符型(char)

    对于简单类型 ,要特别说明的是:
    ① 所有的简单类型均为 .NET Framework系统类型的别名,即每一个简单类型都有相应的 .NET Framework类型与之对应
    ② 简单类型可以使用文字初始化,也可以使用new调用默认的构造函数进行初始化。
    所谓的两种初始化如下所示:
    int myint;//声明变量
    myint=0;//或者 myint=new int ();
    当然也可以声明和初始化一起完成。
    注意:在C#中,局部变量不进行初始化是无法使用的。

  • 结构类型(Struct type): struct
    struct类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。
    这里就有一个问题:有了class,为什么还需要struct?
    struct类型适合表示如点、矩形和颜色这样的轻量对象,尽管可能将一个点表示为类,但结构在某种方案中更有效。例如,如果声明含有1000个点对象的数组,则将为引用每个对象分配附加的内存,在此情况下,结构成本较低。没错,因为struct是值类型,所以它会更高效。
    关于struct,还有一些要注意:
    ① 声明结构的默认(无参数)构造函数是错误的,系统总是提供默认构造函数初始化结构成员。
    ② 在结构中初始化实例字段是错误的。
    ③ 如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
    ④ 结构不存在继承,但结构从基类Object继承,结构可实现接口,其方法同类完全一样。
    ⑤ 你可以对构造函数进行重载。
    ⑥ struct是值类型,请在参数传递时注意这一点,另外,struct的数据成员(字段)可以是其他的引用类型。

  • 枚举类型(Enumeration types):enum
    由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型均有一种基础类型,此基础类型可以是除 char 类型外的任何整型。
    C#学习笔记之数据结构、变量和常量_第1张图片
    (2)引用类型:

  • 类(class)

  • 接口(interface)

  • 委托(delegate)

值类型与引用类型的区别:

  • 值类型的变量总是包含该类型的值,对值类型变量赋值将创建所赋的值的一个副本,而对引用变量赋值将创建引用的副本,而不是引用对象的副本。
  • 所有的值类型均隐式派生自Object类。
  • 与引用类型不同,从值类型不可能派生出新的类型,但与引用类型相同的是,结构可以实现接口。
  • 与引用类型不同,值类型不可能包含null值。
  • 每种值类型均有一个隐式的默认构造函数来初始化该类的默认值。

3. 变量和常量

(1)变量
变量是指内存中的某个存储单元内容的值可以改变,在C#中用一个标识符表示变量,称之为变量名。该标识符必须满足以下要求:
①以字母或下划线符号()开头,后跟任何字母、数字和下划线符号()。
②标识符不能和C#中的关键字同名。

变量的分类(根据变量声明的位置):
①成员变量。在类型中声明,作为类型成员的变量,称为成员变量(即字段)。包括静态变量和非静态变量。
②局部变量。在类型的成员方法中声明的变量,称为局部变量。作为方法定义的参数,也属于局部变量,包括值参数、引用参数和输出参数。
变量可以为类型,也可以为类型的数组。指向数组的变量,称为数组元素。

有关常量与变量详细信息学习推荐博客:https://blog.csdn.net/Gnd15732625435/article/details/50836073
有关类型转换学习推荐博客:
https://blog.csdn.net/weixin_39885282/article/details/80135277

(2)常量

  • 文本常量:代码中出现的文本形式常数即文本常量,又称为字面常量。
  • 用户声明常量:在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量。

你可能感兴趣的:(C#)