C#类型基础(值类型and引用类型)

C#中的类型可分为两类,一类是值类型(value type),一类是引用类型(reference type)。值类型包括结构、枚举、和简单类型(simple type)。引用类型包括对象、类、接口和数组等。

1、值类型

各种值类型总是含有改类型的一个值。C#规定必须初始化变量后才能使用他们进行计算,变量如果没有初始化不会产生异常,但当使用他们时,编译器会告诉用户错误。每当把一个值赋给一个值类型时,该值实际上被复制了。相比,对于引用类型,近视引用被复制,而实际的值任然保留在相同的内存位置,但现在又两个对象指向了它(引用它)。

所有的值类型都隐式地继承自System.ValueType类型,而System.ValueType本身是一个类类型,System.ValueType和所有的引用类型都继承自System.Object基类。用户不能显式地让结构继承一个类,因为C#不允许多重继承,而结构已经隐式地继承自ValueType

(1)简单类型

   在C#中出现的简单类型共享一些特性。第一,它们都是.NET系统的别名。第二,由简单类型组成的常量表达式仅在编译时而不是运行时受检测。最后,简单类型可以按字面被初始化。

(2)结构类型

  一个结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。尽管勒出来的功能看起来像一个成熟的类,但在C#中,结构和累的区别在于结构是一个值类型,而类是一个引用类型。与C++相比,这里可以用结构关键字定义一个类。

使用结构的主要思想是用于创建小型的对象,如学生的基本情况等。使用结构可以帮助用户节省内存,因为结构没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万的对象的数组时,这会引起极大的差异。

(3)枚举类型

枚举时一种指定的常数,通过使用枚举,可以避免不合理的赋值,使程序更加合理和安全。当用户像声明一个由指定常量集合组成的独特类型时,枚举类型就可以发挥它的功能。

2、引用类型

和值类型相比,引用类型不存储它们所代表的世界数据,但它们粗出实际数据的引用。当声明一个引用类型的变量的时候,改引用类型的变量会被分配到堆栈上,这个变量将用于保存未与堆上改引用类型的实例的内存地址,变量本身不包含对象的是数据。此时,如果仅仅声明这样一个变量,由于在堆上没有创建类型的实例,因此,变量值未null,意思时不指向任何类型实例(堆上的对象),对于变量的类型声明,用于限制此变量可以保存的类型。

(1)对象类型

对象类型是所有类型之母——他是其他类型最根本的基类。因为他是所有对象的基类,所以可把任何类型的值赋给它。注意:object并不等价于void*

当一个值类型做为一个对象利用时,对象类型就被使用了。

(2)类类型

一个类类型可以包含数据成员、函数成员和嵌套类型。数据成员时常量、字段和事件。函数成员包括方法、属性、索引、操作符、构造函数和析构函数。类和结构的功能非常相似的,但正如前面所述,结构是值类型而类是引用类型。

和C++相比,C#仅允许单继承。用户不能拥有派生一个新对象的多重基类。但是,C#中的一个类可以派生自多重接口。

(3)接口

接口是为了实现多重继承而产生的。C#中规定一个派生类,只能有一个父类,但可以实现多重接口。一个接口声明一个只有抽象成员的引用类型。接口只包含行为的定义,不能有任何具体的实现。这就暗示了不能实例化一个接口,只能一个派生自该接口的对象。

(4)数组

数组是一组相关数据的集合,集合中的所有匀速都是同样的数据类型,但是又各自表示不同的实际意义,而且元素个数通常是在创建集合时就明确的。一个数组包含有通过计算下标访问的变量。所有包含于数组中且被当作元素的变量必须时同一类型。这种类型被称为“数组类型”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值