C#的类型系统

    xiaoxiao2024-03-10  122

    一.C#的统一类型系统 1.C#的类型系统是统一的,java的类型系统分为:基本类型(原生类型)和类类型,而C#的所有类型直接或间接地从object类类型派生而来,从类型系统上来看比java更OO。 2.C#的类型分为三类: (1)值类型, 一个值类型或是结构类型 或是枚举类型 (2)引用类型 (3)指针类型 值类型与 引用类型的不同在于: 值类型的变量直接包含其数据 而引用类型的变量存储对其数据的引用 (reference) 后者称为对象 (object) 。对于引用类型 两个变量可能引用同一个对象 因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。 二。值类型 1.所有值类型从类 System.ValueType 隐式继承 后者又从类 object 继承。任何类型都不可能从值类型派生。 2. 所有值类型都隐式声明一个称为默认构造函数 (default constructor) 的公共无参数实例构造函数。默认构造函数返回一个零初始化实例 它就是该值类型的默认值 (default value)

    ·         对于所有simple-types默认值是将其所有位都置零的位模式所形成的值

    o        对于sbytebyteshortushortintuintlongulong默认值为0

    o        对于char默认值为'\x0000'

    o        对于float默认值为0.0f

    o        对于double默认值为0.0d

    o        对于decimal默认值为0.0m

    o        对于bool默认值为false

    ·         对于enum-typeE默认值为0

    ·         对于struct-type默认值是通过将所有值类型字段设置为它们的默认值、将所有引用类型字段设置为null而产生的值。

    3.C#中有所谓的简单类型概念(simple type),类似于java的基本类型,但又不同,C#的简单类型本质上都是结构类型(预定义集合的结构类型),所以还是值类型,从 System.ValueType 继承而来。C#的简单类型包括:

    保留字

    化名的类型

    sbyte

    System.SByte

    byte

    System.Byte

    short

    System.Int16

    ushort

    System.UInt16

    int

    System.Int32

    uint

    System.UInt32

    long

    System.Int64

    ulong

    System.UInt64

    char

    System.Char

    float

    System.Single

    double

    System.Double

    bool

    System.Boolean

    decimal

    System.Decimal

    这些简单类型都是System命名空间中预定义结构类型的别名(ruby的别名实在贴心) 4.枚举类型, 枚举类型是具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为 byte sbyte short ushort int uint long ulong 。如果没有为枚举类型中的元素指定基础值,默认是从0开始逐一递增。 三。引用类型

    1.引用类型是类类型、接口类型、数组类型或委托类型。

    2.类类型:包括预定义的类类型和用户通过class关键字的自定义类类型

    3.对象类型:

    object类类型是所有其他类型的最终基类。C#  中的每种类型都是直接或间接从object类类型派生的。

    关键字object只是预定义类System.Object的别名。

    4.string类型: string 类型是直接从 object 继承的密封类类型。 关键字 string 只是预定义类 System.String 的别名. 5.接口类型: 与java中的接口概念基本一致,可以变相实现多重继承。

    类类型

    说明

    System.Object

    所有其他类型的最终基类。

    System.String

    C#  语言的字符串类型。

    System.ValueType

    所有值类型的基类。

    System.Enum

    所有枚举类型的基类。

    System.Array

    所有数组类型的基类。

    System.Delegate

    所有委托类型的基类。

    System.Exception

    所有异常类型的基类。

    四。装箱、拆箱概念 1.装箱和拆箱的概念是 C#  的类型系统的核心。它在 value-type reference-type 之间的架起了一座桥梁,使得任何 value-type 的值都可以转换为 object 类型的值,反过来转换也可以。 2.装箱: 装箱转换允许将 value-type 隐式转换为 reference-type 。 装箱的行为可以用下面的过程描述:

    sealed class T_Box: System.ValueType {T value;

    public T_Box(T t) {     value = t;} }

    分配一个对象实例 然后将 value-type 的值复制到该实例中 3.拆箱: 拆箱转换允许将 reference-type 显式转换为 value-type 从对象 box value-type T 的拆箱转换相当于执行表达式 ((T_Box)box).value 文章转自庄周梦蝶  ,原文发布时间5.17
    最新回复(0)