第二章、C#的数据类型(2.1节~2.6节:值类型以及

系统 1845 0

2.1、C#语法概述

1 )、在 C# 中,编译器是忽略空白符的(包括空格和制表符),所以写程序的时候,可以按照自己的习惯来格式化代码,以满足自己的需求。比如一个变量与一个符号之间可以是一个空格也可以是多个空格,也可以没有空格,但是建议有一个空格。

2 )、在 C# 中,任何一个语句都是以分号结束的,所以在一行上可以写多条语句,每个语句以分号结束即可。但是一般都是一行写一条语句,不能把一条语句分多行写。

3 )、在 C# 中,为了程序更具可读性,一般都要添加很多的注释,在注释的区域内,编译器是不会去编译被注释的内容的,有三种注释方式:

A 、单行注释:在一行之前使用左斜杠“ //

B 、多行注释:在要注释的多行前后加上“ /*……*/

C 、对函数、属性等的说明注释“ /// ”,可以对属性、函数、类进行说明,也可以对函数的参数进行说明,以后调用的时候能看到说明了

4 )、可以隐藏代码: #region……#endregion

5 )、 C# 语言是块结构语言,可以将几个语句包含到“ {} ”中,构成一个块,注意:在块中定义的变量,作用域只在块中。

2.2、C#数据类型的概述

数据类型分类图

2.3、值类型(简单类型)

1 )、 byte 类型

byte 类型是一个无符号整数类型,它占 1 个字节。

2 )、 int 类型

int 类型是有符号整数类型,占用 4 个字节。

3 )、 long 类型

long 类型是有符号整数类型,占用 8 个字节。

4 )、 bool 类型

bool 类型是个逻辑类型,它的值是逻辑值,只有两个,一个是 true ,一个是 false 。对它进行赋值、比较都必须用 true false ,输出也是 true false 。不能赋值为数字。

5 )、 double

双精度,占 64 个字节。在程序中任意写的一个浮点数字是双精度。

6 )、 float

单精度,占 32 个字节。因为在程序中任意写的一个浮点数字是双精度,而在 C# 中,低精度的数值转换成为高精度的数值可以隐式的转换,但是高精度的转换成为低精度只能显示

的转换。所以要把一个浮点数字直接赋值给单精度变量,会出错,必须显式转换,或者在浮点数字后面加上 f

7 )、 char

字符是用单引号括起来的,字符串是用双引号括起来的字符序列集合。字符是以数值的形式存放在内存中的,这个数值就是这个字符的编码。编码有很多种的方式,但是主流的就是以下几种:

A ASCII :如果系统采用这种编码方式,这种编码的字符中,数字、字母占用一个字节,汉字占用两个字节。

B Unicode :如果系统采用这种编码方式,这种编码的所有字符统一占用两个字节。

C GB2312 :如果系统采用这种编码方式,这种编码的字符中,数字、字母占用一个字节,汉字占用两个字节。这个是系统的默认编码。

C# 中, char 类型占用两个字节,所以不论字符采用何种编码方式,它都可以接受任

意一个字符,比如汉字。但是在 C#.NET 中,默认采用的编码方式是 ASCII C#.NET 中的类型是非常严格的,虽然 char 类型的数据最终是以整数编码的形式存放在内存中,但是不能把整数直接赋值给 char 类型的数据, char 可以直接赋值给 int 整数。

常见的转义字符:

\

单引号

\ ’’

双引号

\\

右斜杠

\0

空字符,连空格都不是

\a

响铃

\n

换行

\r

回车

\t

Tab 制表符

注意:

1 )、在 windows 下回车换行符连用: \r\n ,否则无效,即在一行与另一行之间隐含了 \r\n 两个字符。

2 )、在 C# 中,右斜杠 \ 只要出现在字符串中了,那么系统就认为它跟后面的字符一起构成

转义字符,如果这种转义字符是存在的,那么就编译通过,如果转义字符不存在,那么编

译就无法通过,会报错,认为转义字符非法。但是如果在字符串前面加上了 @ 符号,那么

字符串就被认为是逐字符字符串,里面的右斜杠 \ 就会被认为是普通的字符,而不会被认为

是转义字符前面的右斜杠了。

3 )、单引号要特别注意,其实在 C# 中不转义,也可以直接使用。

2.4、值类型(枚举类型)

有些变量,不论它的值怎么变化,也只可能是几个固定的值,那么这种变量就可以定义成枚举类型:

Enum typeName

{

Value1

Value2 = 5

Value3

Value4

……

}

枚举值是有值的,默认情况下第一个值是 0 ,后面依次加 1 递增,也可以对枚举值进行赋值,那么以赋值为主,后面的依次加 1

1 )、定义一个枚举类型的变量:

typeName a

2 )、给它赋值:

a = typeName.value1;

赋值完成之后,输出的也是枚举值而非数值。

3 )、可以将枚举值转换成为整数 :

Int b = (int)a; 或者

int b = Convert.ToInt32(a);

4 )、枚举类型是一个类型,类也是一个类型,很显然是一个级别的,所以枚举类型可以定义在类的外面,命名空间下面,这样才比较合理。当然在类的内部去定义枚举类型也可以,但是不推荐这么做。在本项目中定义的类型可以直接引用,但是在别的项目中定义的类型,首先要添加引用,然后再 using (如果 using 省略的话,那么就需要命名空间名 . 类名),然后如果是定义在类外的,那么必须是 public 才可以引用到,如果是在类的内部的,那么不仅要枚举类型是 public 的,还要类是 public 的,引用的时候是类名 . 枚举类型名。

2.5、值类型(结构类型)

C#.NET 中,结构体基本不使用,因为面向对象的设计思想中,类可以取代结构体,更加方便。在此主要说明一下类与结构体的区别:

1 )、结构体是值类型,而类是引用类型的。

2 )、当结构体和类作为函数参数的时候,参数传递时,结构传的是值,类传的是引用。

3 )、结构的实例化可以不使用 new

4 )、结构也可以声明构造函数,但是必须带参数。

5 )、结构不能继承。

6 )、结构中的字段是不能被初始化的。

2.6、值类型变量的作用域和生存期

非静态变量,只考虑类的内部的情况:

1 )、值类型的变量如果是定义在类的内部作为属性变量,那么就具有该类全局作用域,即类内部的函数都可以调用这个变量,哪怕变量定义在函数的下面。但是一般变量都定义在所有的函数之前;一个对象具有一套变量。

类的对象创建开始,该对象这一套变量在该对象中就分配了存储空间,直到该对象释放,那么该对象这一套变量也就释放了。

2 )、在函数中,变量的作用域是从定义的位置开始,一直到函数结束为止。在函数中,变量定义的前面是不可以引用该变量的。

在函数中,函数被调用的时候,定义变量的时候,变量就被分配了存储空间,函数结束了,变量就会自动的被释放了。

3 )、在函数中的某个块 {} 中定义的变量,作用域是从这个块中定义开始,一直到块结束为止。

函数被调用的时候,定义的时候分配存储空间,块结束的时候就释放了。

但是要特别注意:即使是在块中定义的变量,即使他的作用域只在块中,而不在块外,也不能在块中声明一个与块外同名的变量(这个块外同名变量是指该函数中的,具有从声明开始一直到函数结束为止的作用域的变量,这个变量可以是在块前也可以是在块后的,这个变量不在该函数的另外一个块中)。但是在一个函数的不同的两个块中却可以声明同名的变量。

4 )、如果在类中定义的变量与在函数中定义的变量同名的话,那么函数中的变量会覆盖掉类中的,在该函数中,以该函数中定义的变量为主。但是类中的这个变量在其他函数中还是可以引用的。

第二章、C#的数据类型(2.1节~2.6节:值类型以及值类型变量的作用域与生存期)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论