c#数据类型基础

C#里面的数据类型分为两种:值类型和引用类型。

1.值类型
值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型。
整数类型
数据类型 说明 取值范围 对应于System程序集中的结构
sbyte  有符号8位整数 -128-127 SByte
byte 无符号8位整数 0-255 Byte
short 有符号16位整数 -32768-32767 Int16
ushort 无符号16位整数 0-65535 UInt16
Int 有符号32位整数 -2147489648-2147483647 Int32
uint 无符号32位整数 0-42994967295 UInt32
long 有符号64位整数 -263-263 Int64
ulong 无符号64位整数 0-264 UInt64


字符类型
C#中采用Unicode字符集来表示字符类型。
实数类型
数据类型 说明 取值范围
float 32位单精度实数 1.5*10-45-3.4*1038
double 64位双精度实数 5.0*10-324-1.7*10308
demcimal 128位十进制实数 1.0*10-28-7.9*1028


布尔(bool)类型
取值只能是ture或者false,bool类型对应于.NET类库中的System.Boolean结构。它在计算机中占4个字节,即32位存储空间。
结构类型
把一系列相关的信息组织成为一个单一实体的过程,这就是创建一个结构的过程。
struct person
{
string m_name; //姓名
int m_age; //年龄
string m_sex; //性别
}
枚举类型
主要用于表示一个逻辑相关联的项和组合。使用关键字enum来定义。
enum Weekday
{
Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
}
2.引用类型
引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。
类(class)
类是一组具有相同数据结构和相同操作的对象集合。创建类的实例必须使用关键字new来进行声明。
(重点)类和结构之间的根本区别在于:结构是值类型,而类是引用类型。对于值类型,每个变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;而对于引用类型,每个变量只存储对目标存储数据的引用,每创建一个变量,就增加一个指向目标数据的指针。
接口(interface)
应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。接口定义中对方法的声明,既不包括访问限制修饰符,也不包括方法的执行代码。
(注意)如果某个类继承了一个接口,那么它就要实现该接口所定义的服务。也就是实现接口中的方法。
委托
委托用语封装某个方法的调用过程。
委托的使用过程分为3步:
1.定义 delegate void HelloDelegate();
2.实例化 HelloDelegate hd = new HelloDelegate(p1.Say); //p1.Say调用的方法
3.调用 hd();
数组
数组主要用于同一数据类型的数据进行批量处理。在C#中,数组需要初始化之后才能使用。
如:int[] array1 = new int[3]{2,3,5};
int[] array1 = {2,3,5};
(注意)对规则多维数组,调用Length属性所得的值为整个数组的长度;而调用其GetLength方法,参数为0时得到数组第1维的长度,为1时得到数组第2维的长度,以此类推。而对于不规则多维数组,调用Length属性和以0为参数调用其GetLength方法,得到的都是第一维的长度。
3.类型转换
数值转换
数值的转换有一个原则,即从低精度类型到高精度类型通常可以进行隐式转换;而从高精度类型则必须进行显式转换。
如:int i = 100;
long j = 1000;
j = i; //隐式转换,由低精度到高精度的转换
i = (int)j; //显式转换,有高精度到底精度的转换
具体转换过程中信息的丢失就看各数据类型的精度了。(可以参考上面数据类型)
枚举转换
枚举类型与其他任何类型之间不存在隐式转换。而和枚举类型相关的显式转换包括:
1.从所有整数类型(包括字符类型)和实数类型到枚举类型的显式转换;
2.从枚举类型到所有整数类型(包括字符类型)和实数类型的显式转换;
3.从枚举类型到枚举类型的显式转换。
装箱和拆箱转换
主要是值类型与引用类型之间相互转换。
如:object obj 1= 10;
int i = (int)obj; //拆箱
int j = 100;
object obj2 = j; //装箱
转换检查
如果出现转换失败,程序就会抛出一个System.InvalidCastException异常

 

 

 

 

 

 

 

 

 

===================================

 

//值类型

C# 类型      .NET Framework 类型

bool        System.Boolean               

4Byte 32bit布尔型变量  逻辑值,true或者false,默认值为false

byte        System.Byte               

1Byte 8bit无符号整数无符号的字节,所存储的值的范围是0~255,默认值为0

sbyte         System.SByte 1Byte

8bit有符号整数带符号的字节,所存储的值的范围是-128~127,默认值为0

char        System.Char 

2Byte 16bit 无符号Unicode字符,默认值为’\0’

decimal     System.Decimal

16Byte 128bit十进制数不遵守四舍五入规则的十进制数,28个有效数字,通常用于财务方面的计算,默认值为0.0m

double      System.Double

8Byte 64bit双精度的浮点类型,默认值为0.0d

float          System.Single

4Byte 32bit单精度的浮点类型,默认值为0.0f

int             System.Int32

4Byte 32bit有符号整数,默认值为0

uint        System.UInt32

4Byte 32bit无符号整数,默认值为0

long        System.Int64

8Byte 64bit有符号整数,默认值为0

ulong        System.UInt64

8Byte 64bit无符号整数,默认值为0

object      System.Object

指向类实例的引用,默认值为null

short        System.Int16

2Byte 16bit有符号整数,默认值为0

ushort       System.UInt16

2Byte 16bit无符号整数,默认值为0

string       System.String

指向字符串对象的引用,默认值为null

//引用类型

引用类型的变量又称为对象,可存储对实际数据的引用。本节介绍以下用于声明引用类型的关键字:

·                        class

C++ 不同,C# 中仅允许单个继承。也就是说,类只能从一个基类继承实现。但是,一个类可以实现一个以上的接口。

一个类可包含下列成员的声明:

构造函数析构函数常数字段方法属性索引器运算符事件委托接口结构

只有嵌套类允许访问级别 protected private

·                        interface

接口只包含方法委托事件的签名,它是一个完全抽象的成员集合,它不是类,与基类有着本质的区别。方法的实现是在实现接口的类中完成的

接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性索引器事件

一个接口可从一个或多个基接口继承。

当基类型列表包含基类和接口时,基类必须是列表中的第一项。

实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问。

·                        delegate

委托类型声明的格式如下:

public delegate void TestDelegate(string message);

delegate关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。

委托是事件的基础。

通过将委托与命名方法或匿名方法关联,可以实例化委托。

以下为内置引用类型:

·                        object

object 类型在 .NET Framework 中是 Object 的别名。在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”(Boxed)。将对象类型的变量转换为值类型的过程称为“取消装箱”。

·                        string

string 类型表示零或更多 Unicode 字符组成的序列。string 是 .NET Framework 中 String 的别名。

尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值