语句、块和空白
语句是 C#程序中执行操作的命令,是一行用分号 (;) 终止的代码
System.Console.WriteLine(“Hello World!”);
一个块是以上括号和下括号为边界的语句集合
{
x=y+1;
y=x+1;
}
一个块可被用在一个类的定义中
public class Date
{
int day;
int month;
int year;
}
块语句可被嵌套
A-PDF Split DEMO
C#程序结构
所有代码都组织在类中。
程序从 Main()方法开始执行,Main方法可以包含字符串数组 (string[] args)类型的参数。
C#语言区分大小写。
C#程序中允许任意多的空白。
C#程序中可以使用 //,/* */和 ///添加注释,///后面跟 xml
文档。
//our first c# class
class HelloWorld{
static void Main()
{
System.Console.WriteLine(“Hello World!”);
}
}
A-PDF Split DEMO
标识符
标识符是赋予变量、用户定义的类型和这些类型中成员的名称
– 可从一个字母或下划线 (_)开头,可以包含数字和字符。
– 是大小写区别对待的,且无最大长度。
合法的标识符:
identifier userName User_name _sys_varl
注意:
– 标识符也采用 16位 Unicode编码。
– 标识符不能是关键字,但是它可包含一个关键字作为它的名字的一部分。 thisone是一个有效标识符,但 this却不是,因为
this是一个关键字。 C#有 76个关键字。如果需要把某个关键字作为标识符,可以在其前面加上前缀 @。如 @this。
A-PDF Split DEMO
C#预定义数据类型
C#中有 15个预定义数据类型,其中 13个值类型,2个引用类型。
– 逻辑类型 bool
– 文本类型 char,string
– 整数类型 byte,short,int,long,ubyte,ushort,uint,ulong
– 浮点类型 double,float
– 十进制 decimal
– 基类 object
除 string和 object为引用类型外,其他类型都是值类型。
struct和 enum为值类型,类、引用、委托和数组为引用类型。
– 值类型:赋值操作拷贝的是数据的内容。
– 引用类型:赋值操作拷贝的是数据的存储地址。
A-PDF Split DEMO
值类型的内存分配
int xiaoMing = 100;
int xiaoFang = xiaoMing;
xiaoFang = 200;
说明:
结果 xiaoMing为 100,因为值类型不存在指向同一个对象的问题。
( xiaoMing= = xiaoFang)的结果为 false。
100xiaoMing
200xiaoFang
A-PDF Split DEMO
引用类型的内存分配
Student student; //声明一个 Student对象引用
student
student = new Student(); //创建一个对象
new Student() student =
student student
Student student2 = student; //对象赋值
– student student2
00000000
0000000000000000
0000
00000000
00000000 0x01abcdef
0000000000000000
0000
00000000
0x01abcdef
200328013203194
0000
00000000
0x01abcdef
A-PDF Split DEMO
逻辑类型── bool
bool 数据类型有两种值,true和 false。
例如,bool truth = true;
上述语句声明变量 truth为 bool 类型,它被赋予的值为 true。
注意:在整数类型和 bool类型之间无转换计算。
A-PDF Split DEMO
字符类型── char
char代表一个 16-bit Unicode字符
char c=‘中 ’;
必须包含用单引号( ‘’)引用的文字
可以使用下列符号:
‘a’ 字符 a
‘\t’ 一个制表符 (Tab键 )
‘\\’ 反斜杠,即 ‘\u005c’ 一个特殊的 Unicode字符,对应反斜杠 ‘\’。
关于 Unicode的详细信息可参阅
http://www.unicode.org
A-PDF Split DEMO
整数值
采用两种进制──十进制和 16进制
2 十进制值是 2
0x12AC 首位的 0x表示这是一个 16进制的数值
缺省 int,可以用后缀,L,U,UL”或相应的小写字母定义其他整数类型。
uint ui = 1234U;
long l = 1234L;
ulong ul = 1234UL;
A-PDF Split DEMO
整数变量类型及范围长度 类型 范围
8 bits byte -2
7
(128),.,2
7
-1
ubyte 0,.,2
8
-1 (255)
16 bits short -2
15
(32728),.,2
15
–1
ushort 0,.,2
15
–1 (65535)
32 bit int -2
31
(21亿 ),.,2
31
–1
int 0..,2
32
–1 (42亿 )
64 bits long -2
63
(900亿亿 ),.,2
63
–1
long 0..,2
64
–1 (1800亿亿 )
A-PDF Split DEMO
浮点值
缺省为 double
浮点文字包括小数点或下列各项之一
E或 e (增加指数值 ),F或 f (float),D或 d ( double)
例如:
3.14 一个简单的 double值
4.02E23 一个大的 double值
2.718F 一个简单的 float值
double型的值不能直接赋给 float型变量:
错误,float f = 4.56E23;
正确,float f = 4.56E23F;
A-PDF Split DEMO
浮点变量类型及范围长度 类型 范围
32 bits float 约 ±3.40282347E+38F
(有效小数 6/7位 )
64 bits double 约 ±1.797693134862317E+308
(有效小数 15/16位 )
注意:浮点变量之间注意 = =运算符的使用。应该用如下形式:
double x,y;
x = … ;
y = … ;
/*错误的用法 */ if (x = = y) {}
/*正确的用法 */ if( Math.abs(x-y) <0.00001 ) {}
其中,0.00001表示需要的计算精度要求。
A-PDF Split DEMO
精确十进制类型──decimal
长度 类型 范围
128 bits decimal 约 ±7.9E+28F
(有效小数 28位 )
decimal数据类型用于需要精确十进制数值计算的场合,如财务计算。
要把数值指定为 decimal型,需要在后面加上后缀,M”。例如:
decimal d = 123.40M;
A-PDF Split DEMO
字符串类型── string
string虽然是个引用类型,但用起来确象是值类型,因为 string类的每个方法都生成新字符串,不在原字符串上操作。
string s1 =,abc”;
string s2 =,def”;
string s3 = s1 + s2;
string s4 = s1;
s4 = s4.Replace(“a”,”g”);
问 s1 =?,s4 =?
相应的 System.Text.StringBuilder类,其方法都在原字符串上操作。
字符串中也可以使用转义符,在需要转义符多的情况下,也可以使用符号 @:
string s1 =,c:\\java\\example\\”;
string s2 = @”c:\java\example\”;
A-PDF Split DEMO
字符串运算
连接:符号 +把两个字符串连接起来。
–+生成一个新字符串;非 String类型自动转换为 String。
– 如,int times=2; string name =,Tom”+times; //name为,Tom2”。
子串,subString方法可以提取子串。如:
string person = "Tiger Woods";
string name = person.Substring(0,5);//name为,Tiger”
– 第一个参数为子串开始位置,第二个参数为子串结束位置。
串相等:比较两个串是否相等用 Equals方法或 = =运算符都可。如:
if ( name.equals(“Tiger”) ) {……}
if ( name ==,Tiger” ) {……}
A-PDF Split DEMO
复合类型──结构
结构 struct是一种特殊的类,没有方法,赋值会拷贝数据的内容。
struct Student {
public string name;
public char gender;
}
static void Main()
{ Student s1 = new Student();
s1.name =,Tom”; s1.gender = ‘M’;
Student s2 = s1;
s2.name =,Mary”; s2.gender = ‘F’;
}
问 s1中各字段的值?
结构中的变量默认为 private属性,适于表示较小的对象。
A-PDF Split DEMO
复合类型──枚举
枚举 enum用于声明包含一组可接受的实例值的变量,实际为整数,只是为其起了易于记忆的名字。
enum Gender{ Female = 1,Male = 2,}
public static void Main()
{
Gender g = Gender.Female;
}
A-PDF Split DEMO
变量声明与赋值举例
合法
int x,y; // declare int variables
float z = 3.414F; // declare and assign float
double w = 3.1415; // declare and assign double
bool truth = true; // declare and assign boolean
char c='中 '; // declare character variable
非法
int y = 3.1415926; // 3.1415926 is not an int,
int w = 175,000; // the (,) cannot appear
bool truth = 1; // a common mistake
float z = 3.14 ; //can't fit double into a float.
C#变量声明与赋值习惯
– 在 C#程序中,任何变量都必须经初始化后才能被使用。
– 变量声明与初始化赋值一起进行。
– 变量可以在函数一开始全部声明,也可以在使用之前再声明,
以程序易于阅读修改为原则。
A-PDF Split DEMO
变量初始化错误举例
int x=10,y,z;
if (x>9)
{
y=x;
}
z = y;
上述程序编译时报错,因为 y可能没有初始化就使用。
A-PDF Split DEMO
数据类型之间的隐式转换
隐式转换:当数据类型转换不会丢失数据时,自动进行转换。两种情况:
– 从小类型转换到大类型;
– 从无符号整数转换到大的有符号整数。
转换的规则:
– 整型 →float,double,decimal
–float →double
–char →ushort以上的整型,float,double,decimal
A-PDF Split DEMO
显式类型转换 —造型 (cast)
在信息可能丢失的情况下,类型转换通过造型来完成。
如:
double salary = 2000.85;
int input = (int)salary; //input值为 2000
当转换结果超出了目标类型的范围时,结果是被截取的不同的值。此时可以用 checked或 unchecked来说明是否需要检查溢出错误。例如
unchecked{
byte count1 = (byte)300; //count1值为 44
sbyte count2 = (sbyte)400; //count2值为 -112
}
bool类型不参与造型。若要对 bool类型进行转换,使用
(?:)操作符,如
bool result = true;
int score = result?1:0; //score值为 1
A-PDF Split DEMO
封箱和拆箱
封箱:把值类型转换为引用类型,通俗点说,就是把预定义类型的变量变为一个 object类型的对象。
拆箱:把引用类型还原为相应的值类型,即封箱的逆过程。
int i = 20;
object o = i; //封箱
int j = (int)o; //拆箱
拆箱时,必须保证值变量有足够空间保存引用变量,
否则运行时会抛出异常。
long l = 20;
object o = l; //封箱
int j = (int)o; //拆箱,抛出异常
A-PDF Split DEMO
常量
常量是使用过程中值不会发生变化的变量。
在变量声明前加上 const,就变为常量。
const int i = 20;
i = 30; //编译错误
若改变常量的值,则会出编译错误。
常量是提高程序正确性和灵活性的一种手段。
A-PDF Split DEMO
运算符
算术运算符,+,-,*,/,%
递增递减运算符,++,--
– 建议不要和其他表达式混用。
关系运算符,= =,>,<,>=,<=,!=,is,typeof
三元运算符,?,(选择运算)
– 最适合于求最大 (小 )值,如,z = x>y?x:y;
布尔运算符,&&,||,!
– 布尔运算采用短路方式,例如,if(a!=0 && b/a>2)
位运算符,&,|,^,~,>>,<<
其他:
– 计算所需空间大小,sizeof
– 指针运算符,->
A-PDF Split DEMO
常用运算符的优先级
优先级由高到低为:
[ ], ( )
~ ++ -- +(正号 ) -(负号 ) (造型 ) new
* / %
+ -
> < >= <= typeof
== !=
&&
||
:
= += - = *= /=
明白优先级顺序可以省略括号,如语句 if ( x+y>3 )利用了 +优先级比 >高。
A-PDF Split DEMO
二元运算中的类型转换规则
当使用二元运算符把两个值结合到一起时,在运算前会将两个数转换成相同的类型。转换遵循如下规则:
– 只要有一个数是 double型,则另一个会转换成 double型。
– 否则,只要有一个数是 float型,则另一个会转换成 float型。
– 否则,只要有一个数是 long型,则另一个会转换成 long型。
– 否则,两个数都转换成 int型。
例如:
byte count1,count2;
float price;
short money;
那么 count1+count2为 int型,count1*price为 float型,
money-(count1+count2)*price为 float型。
A-PDF Split DEMO
流程控制语句
分支语句
– if/else:两路分支。
– switch/case:多路分支。
循环语句
–for循环:一般用在循环次数事先可确定的情况。
– while循环,一般用在循环次数事先不可确定且循环体可以一次也不执行的情况。
– do/while循环,一般用在循环次数事先不可确定且循环体至少执行一次的情况。
– foreach循环:一般用于枚举集合或数组中的所有元素。
特殊循环流程控制
– break:跳出语句块。
– continue:跳到语句块末尾(实际上等于开始下一次循环)。
– label:块标记,即语句块的名字。
A-PDF Split DEMO
两路分支语句
if (条件 )
{
语句或块;
}
else
{
语句或块;
}
说明:
– 条件只能是布尔表达式,避免了一些逻辑错误。如:
if ( a = 3 ) {…}
–else部分可省略。
还可写成下面的形式:
if(…){

}else if(…){

}else {

}
A-PDF Split DEMO
多路分支语句
switch (expr1)
{
case expr2:
statements;
break;
case expr3:
case expr4:
statements;
break;
default:
statements;
break;

说明:
– expr1,expr2,expr3,expr4必须是与 int类型兼容的,包括枚举类型,
且 case中的条件必须是常量表达式,不允许出现变量。
– 每个分支结束时必须加 break语句,否则将出现编译错误。即不可贯穿性,可以避免许多错误。多个 case语句可以组合。
– default是可选的。
A-PDF Split DEMO
循环语句
for语句:
for (初始化语句 ; 布尔表达式 ; 更新语句 )
{ 语句或块 ;}
– 初始化语句和更新语句中可以使用,分隔多个操作。
while语句:
while (布尔表达式 )
{ 语句或块 ; }
– 确认循环控制变量正确初始化,控制变量必须被正确更新以防止死循环。
do/while语句:
do{ 语句或块; }while (布尔表达式 )
foreach语句
for (变量 in 集合 )
{ 语句或块 ;}
– 用于循环实现了 IEnumerable接口的数据类型,包括数组,不能改变集合中元素的值。
惯例,for循环一般用在那种循环次数事先可确定的情况,而 while
和 do/while用在那种循环次数事先不可确定的情况。
A-PDF Split DEMO
特殊循环流程控制
break;
– 用来从 switch语句、循环语句中退出。
continue;
– 用来略过并跳到循环体的结尾,以便开始下一个循环。
label,语句 ;
– 标识控制需要转换到的任何有效语句。
goto [label];
– 直接跳转到标签处,不能跳入循环体,不能跨越类,
不能跳出异常处理块。可以在switch语句的case块之间跳转。
A-PDF Split DEMO
C#程序基本结构
目标:编写一个程序,打印 1到 10
–1、确定类名称叫作 Hello
–2、源程序文件名可以和类名无关
–3、源代码如下:
public class Hello
{
public static void Main()
{
//主程序由此开始。
for(int x=1; x<=10; x++)
{
System.Console.WriteLine(x);
}
}
}
–4、编译运行
A-PDF Split DEMO
C#基本输入输出语句
控制台键盘输入:从键盘输入流读入字符串,再转化为相应的类型。
String str = System.Console.ReadLine();
类型转换:字符串型可以转化为其他类型。
int y = int.Parse(str);
double z = double.Parse(str);
控制台输出:直接输出字符串,非字符串类型会自动转化为字符串。
System.Console.Writeline(y);
若出现输入格式问题,则会抛出异常。
A-PDF Split DEMO
举例
public class IOTest
{ public static void Main()
{
System.Console.WriteLine("Please Enter a Number:");
string str = System.Console.ReadLine();
int y = int.Parse(str);
System.Console.WriteLine(y);
System.Console.WriteLine("Please Enter a Double:");
string stri = System.Console.ReadLine();
double z = double.Parse(stri);
System.Console.WriteLine(z);
}
}
A-PDF Split DEMO
练习
练习内容:
– 对 15个原始数据类型,分别声明一个变量,
并进行赋值。先不考虑 object类型。
– 尝试进行不同类型变量间的赋值和造型。
– 写一些简单的表达式,并输出计算结果。
要求:
– 编写的程序要通过编译,能够运行。
A-PDF Split DEMO