C# 基本概念2

类型

类型是C# 语言中最为基本的概念之一。不同类型的变量将
拥有不同的数据存储方式和操作方法。C# 语言的类型系
统是统一的,它可以把任何类型的值都按照对象来处理。


类型概述

C# 语言中的每一个类型都直接或间接派生于object 类型,即
object 类型是C# 语言所有类型的最终基类型。C# 语言的
类型可以分为以下3 种类型。
  值类型(value-type ),它的变量直接包含其数据。
  引用类型(reference-type ),它的变量只存储对其数据
的引用(即访问其数据的访问地址)。引用类型的变量
又称为对象(object )。
  指针类型(point-type ),和C 、C++ 语言中的指针类似
,而且只能用作在不安全代码中。由于在C# 编程中很少
使用指针类型,因此,在此不做详细介绍。


值类型

值类型要么是结构类型,要么是枚举类型。值类型的变量直
接包含其数据,而且其值不可能为null 。在操作值类型的
变量时,只会影响该变量的数据,而不会影响另外一个
变量的值。所有的值类型都直接或间接派生于
System.ValueType 类型。
值类型包括结构类型、枚举类型、布尔类型、自定义结构类
型、sbyte 、byte 、char 、short 、ushort 、int 、uint 、long
、ulong 、float 、double 和decimal 类型。其中,C# 语言提
供了一种被称为“简单类型(simple type )”的预定义结
构类型。这些类型通过C# 保留字标识,如char 、int 等。
本节将详细介绍值类型的知识点。


System.ValueType 类型

所有值类型都直接或间接从System.ValueType 类隐式继承而
来,并且任何类型不能从值类型派生而来。
System.ValueType 本身是一个类,它只包含以下3 个方法

 Equals() ,判定当前实例与指定的对象是否相等。
 GetHashCode() ,返回当前实例的哈希代码。该哈希代码
用于哈希表(一种数据结构)的散列运算。
 ToString() ,返回当前实例的完全限定类型名称。


整数类型

整数类型包括9 种类型,如sbyte 、byte 、short 等。它们的具体说明
、.NET Framework 中的名称和取值范围如下。
1 .int 类型
2 .long 类型
3 .char 类型

类型  描述  .NET Framework中的名称  取值范围
sbyte  有符号8位整数  System.SByte  -128~127
byte  无符号8位整数  System.Byte  0~255
short  有符号16位整数  System.Int16  -32768~32767
ushort  无符号16位整数  System.UInt16  0!65535
int  有符号32位整数  System.Int32  -2147483648~2147483647
uint  无符号32位整数  System.UInt32  0~4294967295
long  有符号64位整数  System.Int64  -9223372036854775808~9223372036854775807
ulong  无符号64位整数  System.UInt64  0~18446744073709551615
char  无符号16位整数  System.Char  0~65535,16位的Unicode字符。


浮点型

C# 语言包括两种浮点型:float 和double 。float 类型表示32 位
的单精度浮点数,它的取值范围为 ±1.5e-45~ ±3.4e38 。
double 类型表示64 位的双精度浮点数,它的取值范围为
±5.0e-324~ ±1.7e308 。浮点数包括以下3 种特殊的值。
  正零和负零
  正无穷大和负无穷大
  非数字(Not-a-Number )值


decimal 类型

decimal 类型表示128 位的数值,取值范围为 ±1.0e-
28~ ±7.9e28 ,特别适用于财务计算和货币计算。和float
类型一样,在书写decimal 类型的值时,需要在数值后添
加后缀m ,否则编译出错。
与浮点型相比,decimal 类型具有较高的精度,但取值范围
较小。因此,从浮点型到decimal 类型的转换可能会产生
溢出异常,而从decimal 类型到浮点型的转换则可能导致
精度损失。正是由于这些原因,所以,在浮点型和
decimal 类型之间不存在隐式转换。如果要转换浮点型到
decimal 类型,则必须使用强制转换方法。


bool 类型

bool 类型表示布尔逻辑量。它只包含两个值:true 和false ,
而且这两个值意义恰好相反。


枚举类型

枚举(enum )类型也是一种值类型,它具有命名常量的独
特的类型。每个枚举类型都有一个基础类型,该基础类
型必须为byte 、sbyte 、short 、ushort 、int 、uint 、long 或
ulong 。其中,默认的基础类型为int 。
枚举类型一般包含一个或多个枚举值,每一个枚举值之间用
逗号(, )分隔。枚举值又称为枚举数,它的默认基础类
型为int 。默认情况下,第一个枚举数的值为0 ,后面的每
一个枚举数的值依次增1 。


结构类型

结构类型也是一种值类型,它可以声明常量、字段、方法、
属性、索引器、运算符、实例构造函数、静态构造函数
和嵌套类型。


引用类型

引用类型主要包括6 种类型:object 类型、string 类型、类类
型、数组类型、接口类型和委托类型。引用类型变量的
值是对该类型的某个实例的一个引用。其中,类型的实
例被称为对象。在引用类型中,存在一个很特殊的值:
null 。null 能够兼容所有的引用类型,表示“每一被引用
的实例”。本节将详细介绍引用类型的知识点。


对象类型

对象(object )类型是C# 类型系统中所有其他类型的最终基
类。C# 中的每种类型都是直接或间接从object 类类型派生
的。因此,C# 中的任何类型都可以转换为object 类型。
C# 从入门到实践
3.3.2 字符串类型
字符串(string )类型是直接从object 继承而来的类类型,它
对应着.NET Framework 中的System.String 类型。


类类型

类(class )类型是C# 中最常用的类型。它是一个数据结构
,能够定义数据成员、函数成员和嵌套类型等内容。其
中,数据成员包括常量和字段,函数成员包括方法、属
性、事件、索引器、运算符、实例构造函数、析构函数
和静态构造函数。
特别地,类类型还支持一种被称为“继承”的机制。继承是
指派生类可用来扩展和专门化基类的一种机制。


数组类型
数组(Array )是一种数据结构,它可以将多个类型相同的
元素组合为一个整体,从而通过数组统一访问或操作这
些元素。数字可以通过计算索引来访问数组中的每一个
元素。每一个元素的类型称为数字的元素类型。


接口类型

接口(interface )类型和类类型非常相似。它也是一个数据
结构,能够声明数据成员和函数成员。其中,数据成员
主要包括属性,函数成员包括方法和事件。


委托类型

委托(delegate )也是一种数据结构,它能够引用一个或多
个方法。特别地,对于实例方法,它还能够引用这些方
法所对应的对象实例。读者如果熟悉C++ 中的函数指针,
那么就不难理解委托这一概念了。
委托类型类似于C++ 中的函数指针,但是它是类型安全的。
委托类型能够将方法作为参数进行传递,并且还可以定
义回调方法。


装箱和拆箱

引用类型总是分配在托管堆上,而值类型总是分配在堆栈上
。有时,程序需要获取指向值类型的引用。此时,需要
将值类型转换为引用类型,这一操作被称为装箱。反之
,把引用类型转换为值类型称为拆箱。
装箱和拆箱是C# 的类型系统中两个很重要的概念,它在值
类型和引用类型之间的架起了一座桥梁。通过装箱和拆
箱操作,可以将任何值类型的变量的值转换为引用类型
的变量的值。反之,也可以进行转换。特别地,有了装
箱和拆箱操作,就可以将C# 类型系统中的任何类型的值
最终都可以按对象来处理。


装箱

装箱是指将值类型隐式转换为引用类型。对于值类型而言,
装箱的具体操作为:首先分配一个对象实例,然后将值
类型的值复制到该实例中。装箱前后不是同一个实例。
对于引用类型而言,装箱前后都共享同一个实例。


拆箱

拆箱是指将引用类型隐式转换为值类型。拆箱的具体操作包
括以下2 个步骤。
(1 )检查该对象实例是否为给定值类型的一个装了箱的值。
(2 )将值从实例中复制出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值