《Csharp语言基础》word版.docx
《《Csharp语言基础》word版.docx》由会员分享,可在线阅读,更多相关《《Csharp语言基础》word版.docx(67页珍藏版)》请在冰豆网上搜索。
《Csharp语言基础》word版
第2章C#语言基础
本章将首先介绍C#的基本数据类型、关键字和标识符、常量与变量、运算符和表达式,以及C#编码规范等基础知识。
然后介绍C#程序控制结构的概念以及选择结构与循环结构的实现,最后介绍C#中的数组、方法、类与对象以及文件操作。
2.1数据类型
数据类型是对各种数据形态的描述,如整型、浮点型等。
在计算机中,数据类型的不同决定所占内存存储空间的大小,使用什么样的数据类型要根据实际情况而定。
C#提供了大量的内置数据类型,被称为基本数据类型,与之对应的是用户自定义的复合数据类型,本节只介绍基本数据类型。
C#语言与.NET框架的结合是无缝的,因此,提供给C#开发者的基本数据类型也是.NET框架的一部分。
表2-1列举了C#语言中的基本数据类型,以及与它们对应的.NET框架的数据类型、大小和说明。
表2-1C#的基本数据类型
C#数据类型
.NET框架数据类型
大小(位)
说明
bool
System.Boolean
8
逻辑值,true或者false,默认值为false
byte
System.Byte
8
无符号的字节,所存储的值的范围是0~255,默认值为0
sbyte
System.SByte
8
带符号的字节,所存储的值的范围是-128~127,默认值为0
char
System.Char
16
无符号的16位Unicode字符,默认值为'\0'
decimal
System.Decimal
128
不遵守四舍五入规则的十进制数,默认值为0.0m
double
System.Double
64
双精度的浮点类型,默认值为0.0d
float
System.Single
32
单精度的浮点类型,默认值为0.0f
int
System.Int32
32
带符号的32位整型,默认值为0
uint
System.UInt32
32
无符号的32位整型,默认值为0
long
System.Int64
64
带符号的64位整型,默认值为0
ulong
System.UInt64
64
无符号的64位整型,默认值为0
续表
C#数据类型
.NET框架数据类型
大小(位)
说明
short
System.Int16
16
带符号的16位整型,默认值为0
ushort
System.UInt16
16
无符号的16位整型,默认值为0
string
System.String
取决于实现平台
指向字符串对象的引用,0~大约20亿个Unicode字符,默认值为null
object
System.Object
32
指向类实例的引用,默认值为null
2.2标识符与命名空间
标识符是计算机语言里常用的一个术语,而命名空间是微软在.NET中提出的一个新概念。
本节将介绍这些概念。
2.2.1关键字与标识符
在VisualC#2008中,关键字是对编译器具有特殊意义的预定义保留符号。
如if、int、do等都是VisualC#2008的关键字,它们不能在程序中用作标识符,除非它们有一个“@”前缀(只有在特殊的情况下使用,否则并不提倡这么做)。
例如,“@if”是一个合法的标识符,而“if”不是合法的标识符,因为它是关键字。
在VisualC#2008中,常量、变量、函数、类等的命名必须遵循一定的规则,通常把符合这些规则的名称称为VisualC#2008的合法标识符,这些规则如下。
(1)标识符必须由字母、十进制数字、下划线(_)或汉字组成,且只能以字母、下划线或汉字开头。
(2)如果以下划线开头,则必须包括至少一个其他字符。
(3)不能是VisualC#2008中的关键字(保留字)。
(4)VisualC#2008的标识符区分大小写。
下面列出了一些合法与不合法的标识符:
abc、_12、加数、if_else//合法的标识符
12abc//错误,不能以数字开头
_//错误,以下划线开头,应至少包括一个其他字符
Ab#3//错误,包含非法字符#
false//错误,“false”是VisualC#2008中的关键字
注意:
①VisualC#2008标识符区分大小写,如:
“AbC”与“ABc”是不同的标识符,在编写代码时要注意。
②虽然在VisualC#2008中,标识符中允许使用中文(汉字),但是并不提倡这么做。
2.2.2命名空间
在编写大型程序时,随着代码的增多,就意味着越来越多的名称、命名数据、已命名过程以及已命名类等,这就极有可能发生两个或者两个以上的标识符名称冲突,造成项目的失败。
为了解决类似的问题,需要引入“命名空间”的概念。
微软在.NET中,引入了命名空间(namespace),命名空间就是用来解决上述问题的,它为各种标识符创建一个已命名的容器,同名的两个标识符如果不出现在同一个命名空间中,是不会相互冲突的。
例如,求平方根的数学函数Sqrt()位于命名空间“System.Math”中,在使用Sqrt()函数时,需要输入完整的命名空间和函数名称“System.Math.Sqrt()”,增加输入的难度。
VisualC#2008允许在代码编辑器的顶部引入命名空间,这样就可以在下面的代码中直接使用Sqrt()函数。
引入“System.Math”命名空间的代码如下:
//**********************************************************************
usingSystem.Math
//**********************************************************************
2.3常量与变量
计算机处理的数据分为常量和变量两种,本节将介绍常量与变量的概念以及它们的声明和使用方法。
2.3.1常量
常量是指在程序运行的过程中,其值保持不变的量。
VisualC#2008的常量包括符号常量、数值常量、字符常量、字符串常量和布尔常量等。
符号常量一经声明就不能在任何时候改变其值。
VisualC#2008中,采用const语句来声明常量,其语法格式为:
const<数据类型><常量名>=<表达式>…
对以上语法格式说明如下:
①<常量名>遵循标识符的命名规则,一般采用大写字母。
②表达式由数值、字符、字符串常量及运算符组成,也可以包括前面定义过的常量,但是不能使用函数调用。
例如:
//**********************************************************************
constintMIN=100;//声明常量MAX,代表1000,整型
constfloatPI=3.14F;//声明常量PI,代表3.14,单精度型
conststringSTR="2009010101";//声明常量STR,代表"2009010101",字符串型
//**********************************************************************
③如果多个常量的数据类型是相同的,可在同一行中声明这些常量,声明时用逗号将它们隔开。
如:
//**********************************************************************
constintNUM1=10,NUM2=100,NUM3=1000;
//**********************************************************************
2.3.2变量
变量是在程序运行的过程中,其值可以改变的量,它表示数据在内存中的存储位置,每个变量都有一个数据类型,以确定哪些数据类型的数据能够存储在该变量中。
C#是一种数据类型安全的语言,编译器总是保证存储在变量中的数据具有合适的数据类型。
在VisualC#2008中,声明变量的语法格式为:
<数据类型><变量名>=<表达式>…
对以上语法格式说明如下:
①<变量名>遵循C#合法标识符的命名规则。
②[=<表达式>]为可选项,可以在声明变量时给变量赋一个初值(即变量的初始化),例如:
//**********************************************************************
floatx=12.3;//声明单精度型变量X,并赋初值12.3
//**********************************************************************
等价于:
//**********************************************************************
floatx;
x=12.3;
//**********************************************************************
③一行可以声明多个相同类型的变量,且只需指定一次数据类型,变量与变量之间用逗号隔开,例如:
//**********************************************************************
intnum1=10,num2=100,num3=1000,num4=10000;
//**********************************************************************
2.4运算符与表达式
运算符是对一个或者多个返回值的代码元素执行运算的代码单元,VisualC#2008的运算符包括算术运算符、逻辑运算符、字符串连接运算符、关系运算符、赋值运算符、位运算符和自增自减运算符等,本节将详细介绍这些运算符和表达式,以及它们的优先级。
2.4.1算术运算符
算术运算符用于完成算术运算,所涉及的操作对象有文本、常量、变量、表达式、函数调用以及属性调用等。
例如,运算符“*”用于将其两边的操作数的值相乘。
VisualC#2008的算术运算符及相应的表达式示例如表2-2所示。
表2-2算术运算符
运算
运算符
算术表达式示例
结果及说明
取负
-
-1
对数字1进行取负运算
加法
+
1+2
1加上2,结果为3
减法
-
1-2
1减去2,结果为-1
乘法
*
1×2
1乘以2,结果为2
除法
/
10/2
10除以2,结果为5
求余
%
10%4
取10除以4的余数,结果为2
对算术运算符说明如下:
①“%”为求余运算符,求两个数相除后的余数。
②进行除法运算时,如果两个操作数均为整数,则得到的结果也是整数,并不采用四舍五入规则,而是直接舍弃其小数部分,例如,“10/4”的结果为“2”、“15/4”的结果为“3”。
③数学运算符中,只有取负(-)为一元(只有一个操作数)运算符,其他均为二元(有两个操作数)运算符。
④算术运算符的优先级顺序由高到低依次为:
-(取负)、*、/、%、+、-(减)。
2.4.2字符串连接运算符
VisualC#2008的字符串连接运算符只有一个,即“+”,它一般用于连接两个字符串。
字符串连接表达式的结果仍为字符串类型的数据,例如:
"Visual"+"C#"+"2008"//结果为"VisualC#2008"
对字符串连接运算符说明如下:
当“+”连接的对象中既有字符串又有数字时,则可以省略数字的字符串定界符(""),例如,
"Visual"+"C#"+"2008"
可以写成
"Visual"+"C#"+2008
这样做并不会影响计算的结果,但是并不提倡这样做。
2.4.3关系运算符
关系运算符用于比较两个表达式之间的关系,比较的对象通常有数值、字符串和对象等,关系运算的结果是一个bool值,即true或false。
VisualC#2008的关系运算符及相应的表达式示例如表2-3所示。
表2-3关系运算符
运算符
测试关系
关系表达式示例
结果(设变量a的值为10)
==
等于
a==8
false
!
=
不等于
a!
=8
true
<
小于
a<8
false
<=
小于等于
a<=8
false
>
大于
a>8
true
>=
大于等于
a>=8
true
对关系运算符及表2-3说明如下:
①表2-3中给出的运算结果,是在假定变量a的值为10的前提下得到的。
②所有的关系运算符均为二元运算符。
关系表达式的运算结果是一个bool值,即true或false。
2.4.4逻辑运算符
逻辑运算符(也称布尔运算符)用于判断操作数之间的逻辑关系。
逻辑表达式的值也是一个bool值,即true或false。
VisualC#2008的逻辑运算符有:
&&(与)、||(或)、!
(非)。
其中,只有逻辑非(!
)为一元运算符,其他均为二元运算符。
逻辑运算符(&&、||、!
)的运算规则如下。
(1)逻辑非(!
):
由真变假或由假变真,进行取反运算。
例如,!
(2>10)的值为true。
(2)逻辑与(&&):
对两个操作数进行与运算,如果两个操作数均为true,则结果为true;否则为false。
例如,(2<10)&&(8<5)的值为false。
(3)逻辑或(||):
对两个操作数进行或运算,如果两个操作数其中有一个为true,则结果为true;只有当两个操作数均为false时,结果才为false。
例如,(2<10)||(8<5)的值为
true。
2.4.5赋值运算符
在VisualC#2008中,赋值运算符有基本赋值运算符和复合赋值运算符两种,通常用于将表达式的值赋给一个变量。
VisualC#2008的赋值运算符(包括复合赋值运算符)及相应的表达式示例如表2-4所示。
表2-4赋值运算符
运算符
赋值表达式示例
结果(设变量a的初始值为2)
=
a=8把值8赋给变量a
a=8
+=
a+=8
a=10(相当于a=a+8)
-=
a-=8
a=-6(相当于a=a-8)
*=
a*=8
a=16(相当于a=a*8)
/=
a/=2
a=1(相当于a=a/2)
%=
a%=2
a=0(相当于a=a%2)
2.4.6位运算符
计算机处理的数据都是以二进制的形式保存的,VisualC#2008提供了一些专门针对二进制数的运算符,即位运算符。
位运算符按二进制位进行运算,VisualC#2008的位运算符如表2-5所示。
表2-5VisualC#2008的位运算符
位运算符
含义
说明
&
与
两个二进制位同为1时结果为1,否则为0
|
或
两个二进制位同为0时结果为0,否则为1
^
异或
两个二进制位相同时结果为0,否则为1
~
取补
按位取反,即~0=1,~1=0
<<
左移
操作数按位左移,最高位移出,最低位补0
>>
右移
操作数按位右移,最低位移出
2.4.7自增和自减运算符
VisualC#2008与C/C++相同,保留了自增运算符(++)和自减运算符(--),它们是一元运算符,且操作的对象只能是变量。
1.自增运算
自增运算符(++)的作用是对变量的值加1。
自增运算符(++)可以放在被操作变量的前面(称为前自增),也可以放在被操作变量的后面(称为后自增)。
前自增与后自增有很大的区别,如果带有自增运算符(++)的变量出现在表达式中,前自增的执行过程是:
先使变量的值加1,再执行其他运算;而后自增则是先执行其他运算,再使变量的值加1。
2.自减运算
自减运算符(--)的作用是对变量的值减1。
自减运算符(--)可以放在被操作变量的前面(称为前自减),也可以放在被操作变量的后面(称为后自减)。
前自减与后自减也有很大的区别,如果带有自减运算符(--)的变量出现在表达式中,前自减的执行过程是:
先使变量的值减1,再执行其他运算;而后自减则是先执行其他运算,再使变量的值减1。
2.4.8其他运算符
除了前面介绍的一些运算符,VisualC#2008还提供了一些其他的运算符,如条件运算符、is运算符和typeof运算符等。
1.条件运算符
条件运算符“?
:
”也称为三元运算符,它是后面要介绍的选择结构控制语句if…else的简化形式,具有3个操作数,其语法格式如下:
<条件表达式>?
<条件成立的返回值>:
<条件不成立的返回值>
其中<条件表达式>的值是一个bool值,即true或false。
若表达式的值为true,则返回<条件成立的返回值>;否则,返回<条件不成立的返回值>。
虽然三元运算符看起来很简单,但它常常会导致程序难以理解,可读性差,因此在实际的编程中,并不提倡这么做。
而应当尽量避免使用它,采用选择结构控制语句if…else来解决类似的问题。
2.is运算符
is运算符用来比较两个对象的引用变量,其语法格式如下:
result=<表达式>is<类型>
result是一个bool值,如果<表达式>的数据类型和<类型>相同或者相容,则result的值为true;否则,result的值为false。
3.typeof运算符
typeof运算表达式返回一个表示特定类型的System.Type对象。
例如,typeof(int)返回表示System.int32类型的Type对象,typeof(string)返回表示System.String类型的Type对象。
该运算符在使用反射动态查找对象信息时很有用。
4.sizeof运算符
sizeof是C#语言的一种一元运算符,它并不是函数。
sizeof运算符以字节形式给出了其操作数的存储大小。
操作数可以是一个类型名,操作数的存储大小由操作数的数据类型决定。
2.4.9运算符的优先级和结合顺序
前面介绍了C#的一些常用的运算符,本小节将介绍这些运算符的优先级顺序及其结合性。
下面先来看一下运算符的优先级。
1.运算符的优先级
根据运算符所执行运算的特点和它们的优先级,可将它们归为一元运算符和括号、算术运算符、移位运算符、比较运算符、位运算及逻辑运算符、赋值运算符、后自增和后自减运算符7个等级。
这些运算符的优先级顺序根据这7个等级进行划分,如表2-6所示(从第一级到第七级,优先级逐步降低)。
表2-6运算符的优先级
级别
运算符
第一级
++、--(作为前缀)、()、+、-(取负)、!
、~
第二级
*、/、%、+、-
第三级
<<、>>
第四级
<、>、<=、>=、==、!
=
第五级
&、^、|、&&、||、?
:
第六级
=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=
第七级
++、--(作为后缀)
2.运算符的结合顺序
运算符的结合顺序分为左结合和右结合两种,在VisualC#2008中,所有的一元运算符(++、--作为后缀时除外)都是右结合的。
而对于二元运算符,除了赋值运算符外,其他的都是左结合的。
2.5命名规则
编写代码时,使用良好的风格对标识符命名是一个优秀的程序员必须养成的习惯。
变量、函数、结构、枚举、类、属性、事件、方法等的命名都遵循这些规则,这样可以大大地提高程序的可读性,并可方便开发团队中各人员之间的合作。
1.标识符的书写风格
标识符的书写通常有以下几种风格。
1)Pascal风格
大写每一个单词的第一个字符,如WindowsApplication1、MaxNum。
2)Camel风格
除了第一个单词,大写其他单词的第一个字符,如maxNum、userName。
3)全部大写
如果标识符包含的字符数较少,可以采用全部大写的方法,一般用于常量的命名,如PI、MAX、MIN。
2.类、结构、枚举和命名空间的命名
类(class)、结构(struct)、枚举(enum)和命名空间(namespace)的命名一般采用Pascal风格,由名词或名词短语构成,且不要使用任何前缀。
例如,Form1、StudentInformation、WeekDays、TxtWelcome等。
3.参数、变量的命名
参数、变量的命名采用Camel风格,使用描述性的名字,使它能够充分地表示出参数或变量的含义。
例如,maxNumber、userName等。
如果变量仅用来在循环中计数,即作为循环变量,则优先使用i、j、k、l、m、n等。
4.方法、事件的命名
方法的命名采用Pascal风格,使用动词或动词短语命名。
例如,AddValues、Button1-Click、Click、DoubleClick、FormClosing等。
5.属性的命名
属性的命名采用Pascal风格,使用名词或名词短语命名。
例如,BackColor、ReadOnly、ControlBox等。
6.控件的命名
控件的命名采用Camel风格(Form除外),即首字母小写,而每个后面连接的单词的首字母都大写,命名的形式为:
控件名的简写+英文描述(英文描述首字母大写)。
例如,btnOk、lblShow、txtInputNum等。
VisualC#2008常用控件的简写及应用举例如表2-7所示。
表2-7常用控件的简写及应用举例
常用控件
简写
应用举例
Form
Frm
FrmMain(一个Form对应一个类)
Label
lbl
lblShow
LinkLabel
llbl
llblEmail
Button
btn
btnOk
TextBox
txt
txtInputNum
RichTextBox
rtxt
rtxtShowData
MainMenu
mmnu
mmnuFile
CheckBox
chk
chkStock
RadioButton
rbtn
rbtnSelected
GroupBox
gbx
gbxMain
PictureBox
pic
picLogo
Panel
pnl
pnlBody
ListBox
lst
lstUser
ComboBox
cmb
cmbMenu
ListView
lvw
lvwBrowser
TreeView
tvw
tvwType
TabControl
tctl
tctlMain
DateTimePick