C#的类型系统

一.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,默认值为<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="F">0.0f</st1:chmetcnv>。

o        对于double,默认值为0.0d

o        对于decimal,默认值为<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="m">0.0m</st1:chmetcnv>。

o        对于bool,默认值为false

·         对于enum-typeE,默认值为0

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

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

保留字<o:p></o:p>

化名的类型<o:p></o:p>

sbyte<o:p></o:p>

System.SByte<o:p></o:p>

byte<o:p></o:p>

System.Byte<o:p></o:p>

short<o:p></o:p>

System.Int16<o:p></o:p>

ushort<o:p></o:p>

System.UInt16<o:p></o:p>

int<o:p></o:p>

System.Int32<o:p></o:p>

uint<o:p></o:p>

System.UInt32<o:p></o:p>

long<o:p></o:p>

System.Int64<o:p></o:p>

ulong<o:p></o:p>

System.UInt64<o:p></o:p>

char<o:p></o:p>

System.Char<o:p></o:p>

float<o:p></o:p>

System.Single<o:p></o:p>

double<o:p></o:p>

System.Double<o:p></o:p>

bool<o:p></o:p>

System.Boolean<o:p></o:p>

decimal<o:p></o:p>

System.Decimal<o:p></o:p>

这些简单类型都是System命名空间中预定义结构类型的别名(ruby的别名实在贴心)

4.枚举类型, 枚举类型是具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为 bytesbyteshortushortintuintlongulong 。如果没有为枚举类型中的元素指定基础值,默认是从0开始逐一递增。

三。引用类型

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

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

3.对象类型:

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

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

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

类类型<o:p></o:p>

说明<o:p></o:p>

System.Object<o:p></o:p>

所有其他类型的最终基类。<o:p></o:p>

System.String<o:p></o:p>

C#  语言的字符串类型。<o:p></o:p>

System.ValueType<o:p></o:p>

所有值类型的基类。<o:p></o:p>

System.Enum<o:p></o:p>

所有枚举类型的基类。<o:p></o:p>

System.Array<o:p></o:p>

所有数组类型的基类。<o:p></o:p>

System.Delegate<o:p></o:p>

所有委托类型的基类。<o:p></o:p>

System.Exception<o:p></o:p>

所有异常类型的基类。<o:p></o:p>


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

sealed class T_Box: System.ValueType
{
T value;

public T_Box(T t) {
     value = t;
}
}<o:p></o:p>

分配一个对象实例 , 然后将 value-type 的值复制到该实例中
3.拆箱: 拆箱转换允许将 reference-type 显式转换为 value-type
从对象 box value-type T 的拆箱转换相当于执行表达式 ((T_Box)box).value
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值