C# 基础编程 ---- 类型和变量

    C#中的类型有两种:值类型(Value Type)和引用类型(Reference Type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己数据的副本(除ref和out参数变量外),因此对一个变量的操作不可能影响另一个变量。


    C#值类型可分为简单类型(Simple Type)、枚举类型(Enum Type)、结构类型(Struct Type)和可以为null(Nullale Type)的类型。

    C#引用类型可分为类类型(Class Type)、接口类型(Interface Type)、数组类型(Array Type)和委托类型(Delegate Type)。


    C#值类型(Value Type):

    1. 简单类型(Simple Type):

        有符号整型:sbyte(8 bit), short(16 bit), int(32 bit), long(64 bit)

        无符号整型:byte(8 bit), ushort(16 bit), uint(32 bit), ulong(64 bit)

        Unicode字符:char,表示一个UTF-16编码单元。

        浮点型:float(32 bit), double(64 bit),它们使用单精度和双精度的IEEE754格式表示。

        高精度小数型:decimal(128 bit),适合用于财务计算和货币计算。

        布尔型:bool,用于表示值为true和false的布尔值。

    2. 枚举类型(Enum Type):

        enum E { ... }形式的用户自定义类型

    3. 结构类型(Struct Type):

        struct S { ... }形式的用户自定义类型

    4. 可以为null的类型(Nullable Type):

        其他所有具有null值的值类型的扩展


    C#引用类型(Reference Type):

    1. 类类型(Class Type):

        所有其他类型的最终基类:object

        Unicode字符串:string

        class C { ... }形式的用户自定义类型

    2. 接口类型(Interface Type):

        interface I { ... }形式的用户自定义类型

    3. 数组类型(Array Type):

        一维数组和多维数组,例如int[]和int[,]

    4. 委托类型(Delegate Type):

        delegate int D( ... )形式的用户自定义类型    


    C#值类型中简单类型的取值范围:

    有符号整型:

    sbyte, 8 bit,取值范围:-128 ~ 127

    short, 16 bit, 取值范围:-32678 ~ 32767

    int, 32 bit, 取值范围:-2147483648 ~ 2147483647

    long, 64 bit, 取值范围:�C9223372036854775808 ~ 9223372036854775807 


    无符号整型:

    byte, 8 bit, 取值范围:0 ~ 255

    ushort, 16 bit, 取值范围:0 ~ 65535

    uint, 32 bit, 取值范围:0 ~ 4294967295

    ulong, 64 bit, 取值范围:0 ~ 18446744073709551615


    浮点型:

    float, 32 bit, 取值范围:1.5 * 10^-45 ~ 3.4 * 10 ^ 38,7位精度

    double, 64 bit, 取值范围:1.5 * 10^-324 ~ 1.7 * 10^308,15位精度


    高精度小数型:

    decimal, 128 bit, 取值范围:1.0 * 10^-28 ~ 7.9 * 10^28,28位精度


    字符型:

    char, 16 bit, 取值范围:0 ~ 65535


    布尔型:

    bool, 取值范围:true/false   


    C#程序使用类型声明(Type Declaration)来创建新类型。类型声明指定***手类型的名称和成员。在C#类型分类中,有五类是用户可定义的:类类型、结构类型、接口类型、枚举类型和委托类型。

    类类型定义一个包含数据成员和函数成员的数据结构。类类型支持单一继承和多态,派生类可用来扩展和专用化基类的机制。

    结构类型与类类型相似,表示一个带有数据成员和函数成员的结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型object继承。

    接口类型定义了一个协定,作为一个公共函数成员的命名集。实现某个接口的类或结构必须提供该接口的函数成员的实现。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。

    委托类型表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。

    类类型、结构类型、接口类型和委托类型都支持泛型,困此可以通过其他类型将其参数化。

    枚举类型是具有命名常量的独特的类型。每种枚举类型都具有一个基础类型,该基础类型必须是八种整型之一。枚举类型的值集和它的基础类型的值集相同。

    C#支持由任何类型组成的一维和多维数组。与以上列出的类型不同,数组类型不必声明就可以使用。实际上,数组类型是通过在某个类型名后加一对方括号来构造的。

    可以为null的类型也不必声明就可以使用。对于每个不可以为ull的值类型T,都有一个相应的可以为null的类型T?,该类型可以容纳附加值null。

    C#的类型系统是统一的,因此任何类型的值都可以按对象处理。C#中的每个类型直接或间接地从object类类型派生,而object是所有类型的最终基类。引用类型的值都被视为object类型,被简单地当作对象来处理。值类型的值则通过对其执行装箱和拆箱操作按对象来处理。

    当将值类型的值转换为类型object时,将分配一个对象实例(也称“箱子”)以包含该值,并将值复制到该箱子中。反过来,当将一个object引用强制转换为值类型时,将检查所引用的对象是否含有正确的值类型,如果有,则将箱子中的值复制出来。

    C#的统一类型系统实际上意味着值类型可以“按需”转换为对象。因为统一,所以使用类型object的通用库可以与引用类型和值类型一同使用。


    C#变量包括字段、数组元素、局部变量和参数。

    变量表示了存储变量,并且每个变量都有一个类型,以决定什么样的值能够存入变量,如下概述:

    1. 不可以为null的值类型变量:类型完全相同的值。

    2. 可以为null的值类型变量:null值和类型完全相同的值。

    3. object变量:null引用、对任何引用类型的对象的引用,或者对任何值类型的装箱的引用。

    4. 类类型变量:null引用、对该类类型的实例的引用,或者对从该类类型派生的类的实例的引用。

    5. 接口类型变量:null引用、对实现该接口类型的类类型的实例的引用,或者对实现该接口类型的值类型的装箱值的引用。

    6. 数组类型变量:null引用、对该数组类型的实例的引用,或者对兼容数组类型的实例的引用。

    7. 委托类型变量:null引用或对该委托类型的实例的引用。

你可能感兴趣的:(变量,引用类型,值类型)