C#类型基础(值类型and引用类型)
2016-08-08 22:23
417 查看
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、值类型
各种值类型总是含有改类型的一个值。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)数组
数组是一组相关数据的集合,集合中的所有匀速都是同样的数据类型,但是又各自表示不同的实际意义,而且元素个数通常是在创建集合时就明确的。一个数组包含有通过计算下标访问的变量。所有包含于数组中且被当作元素的变量必须时同一类型。这种类型被称为“数组类型”。
相关文章推荐
- C#基础:值类型、引用类型与ref关键字
- C#基础回顾之1——值类型与引用类型
- C# 类型基础 之 值类型 和 引用类型
- C#基础|值类型和引用类型以及传参问题
- C#基础原理拾遗——引用类型的值传递和引用传递
- C#基础(四)(C#预定义值类型和引用类型)
- C#基础知识整理:基础知识(11) 值类型,引用类型
- [C#基础知识]之值类型与引用类型
- C#基础之值类型和引用类型的== 与 Equals,string和object的特殊性
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
- [C#基础]5.预定义和引用类型
- [C#基础知识]Ref 关键字在修饰在引用类型时的行为
- 复习一下基础:'C# 值类型和引用类型 以及作为方法参数的区别'
- C#基础原理拾遗——引用类型的值传递和引用传递
- C#基础知识拾遗1--值类型和引用类型
- C#基础:值类型、引用类型与ref关键字
- C#语言学习--基础部分(十一) --值类型和引用类型
- C#基础积累(三)值类型和引用类型
- C#基础实践:引用与值类型
- C#基础原理拾遗——引用类型的值传递和引用传递