第2章C#程序设计.1.ppt

上传人:本田雅阁 文档编号:3423400 上传时间:2019-08-24 格式:PPT 页数:131 大小:3.45MB
返回 下载 相关 举报
第2章C#程序设计.1.ppt_第1页
第1页 / 共131页
第2章C#程序设计.1.ppt_第2页
第2页 / 共131页
第2章C#程序设计.1.ppt_第3页
第3页 / 共131页
第2章C#程序设计.1.ppt_第4页
第4页 / 共131页
第2章C#程序设计.1.ppt_第5页
第5页 / 共131页
点击查看更多>>
资源描述

《第2章C#程序设计.1.ppt》由会员分享,可在线阅读,更多相关《第2章C#程序设计.1.ppt(131页珍藏版)》请在三一文库上搜索。

1、ASP.Net 程序设计,张 凯 计算机学院 软件工程系,2010年9月15日,第二章 C#程序设计,C#语言概述,C#语言的变量和数据类型,C#语言的表达式和控制语句,ASP.Net自定义的类,4,1,2,3,C#语言概述,C#语言的产生背景 C、C+、Pascal、Basic、Fortran、Java、C# VC、Delphi、VB、VF、 Eclipse、VC#,C#语言概述,C#语言的产生背景 Delphi和.NET之父: 安德斯海尔斯伯格(Anders Hejlsberg) 丹麦,Turbo Pascal,C#编译器的主要作者 Anders使用汇编语言撰写编译器,其功力无人能出其右。

2、创造出了全世界速度最快、 品质也是一流的Pascal编译器。在Anders离开了Borland之后,几乎没有人能够修改Anders的编译器,C#语言概述,C#语言的产生背景 Hejlsberg曾在丹麦科技大学学习工程学 1981,Anders 和Philippe Kahn共同创办Borland。 他将Turbo Pascal变成面向对象的、拥有可视化环境和卓越的数据库访问特性的应用程序开发语言Delphi。 MS曾多次企图挖走Anders,但都没有成功。130万美元年薪外加股票期权和分红,总计超过300万美元。 Java出现了,Philippe Kahn离开,Anders Hejlsberg在

3、Borland一直郁郁不得志。 当清楚Anders Hejlsberg的想法后,比尔盖茨答应给他一个宽松的环境,既领导Visual J+小组。,C#语言概述,C#语言的产生背景 然而,好景不长 SUN公司认为微软破坏了java的跨平台性,很快微软就会利用它的VJ+将java开发人员拉拢到它的周围,而它的VJ+以及WFC的很多特性明显是为了Windows平台设计。SUN中止了对微软的java授权。此后微软便选择Anders Hejlsberg担任C#的首席设计师。 Anders Hejlsberg,微软.NET的首席架构师,编程语言设计和实现的顶尖高手。他一手做出了Turbo Pascal,也是

4、Delphi, J,C#和.NET的主要作者。,.Net Framework命名空间,命名空间的功能 命名空间用于组织.NET Framework提供的几千个类。 使用命名空间可以解决类名冲突问题。,.Net Framework命名空间,命名空间的使用 利用using语句使用命名空间,如 “using System;” 表示导入System命名空间。 导入命名空间后,使用其包含的类时可省略命名空间。 例如,若没有使用“using System.Net.Mail”语句, 则定义“MailMessage MyMail”这个语句就会出现编译错误,此时就必须用 System.Net.Mail.Mail

5、Message MyMail代替。,.Net Framework命名空间,ASP.Net常用命名空间 System:提供基本类,如提供字符串操作的String类。 System.Configuration:提供处理配置文件中数据的类,如能获取web.config文件中数据库连接字符串的ConnectionStringSettings类。 System.Data:提供对ADO.NET类的访问,如提供数据缓存的DataSet类。 System.Ling:提供使用LINQ进行查询的类和接口,如包含标准查询运算符的Queryable类。,.Net Framework命名空间,ASP.Net常用命名空间

6、 System.Web:提供使浏览器与服务器相互通信的类和接口,如用于读取客户端信息的HttpRequest类。 System.Web.Security:提供在Web服务器实现ASP.NET安全性的类,如用于验证用户凭据的MemberShip类。 System.Web.UI:提供用于创建ASP.NET网站用户界面的类和接口,如每个Web窗体都继承的Page类。,.Net Framework命名空间,ASP.Net常用命名空间 System.Web.UI.HtmlControls:提供在Web窗体页上创建 HTML服务器控件的类。 System.Web.UI.WebControls:提供在Web

7、窗体页上创建Web服务器控件的类,如按钮Button控件类。 System.Web.UI.WebControls.WebParts:提供用于创建个性化Web部件页的类和接口,如呈现模块化用户界面的Part类。 System.Xml.Linq:提供用于LINQ to XML的类,如获取XML元素的Xelement类。,C#语言的变量、数据类型,什么才是程序语言的核心? 语法?函数库? 机器语言时代寄存器、内存地址、位长 汇编语言时代助记符、变量间没有截然的界限 中级语言时代里程碑、完全引入变量和变量类型 高级语言时代变量概念的新发展,结构体(记录) 面向对象时代面向类、Java、.Net 传统变

8、量类型被彻底放弃,所有的变量类型都被理解为类,所有的变量都成为对象,程序语言真正的核心变量!,C#语言的变量、数据类型,变量 编程的需要 应用程序在运行过程中需要将一些数据信息保存在内存中,而我们在编写程序时不可能直接使用地址的方式来标识内存;因此就要使用变量。,C#语言的变量、数据类型,变量 什么是变量? 简单的说,变量是用来代表某内存空间的一个标识,可以利用变量名来将数据保存到与之对应的内存中;反之,也可以通过变量名将与之对应的内存中的数据取出。,如何定义变量和使用变量呢?这要结合数据类型来使用,C#语言的变量、数据类型,C#语言的数据类型 为什么需要数据类型? 应用程序总是需要处理和保存

9、数据,而现实世界中的数据类型多种多样,比如:人的名字;人的年龄等等。所以应该让计算机知道需要处理什么样的数据、采用哪种方式进行处理以及按什么格式保存数据。 C#语言预定义了很多种数据类型:整数类型、实数类型、数组、类等。,C#语言的变量、数据类型,C#语言的变量、数据类型,C#语言的变量、数据类型,C#语言的变量、数据类型,C#语言的变量、数据类型,如何使用整数类型int来定义一个变量? 数据类型 变量名 int age;这就定义了一个具有特定数据类型(int)的变量(age) age = 90;,C#语言的变量、数据类型,如何使用整数类型int来定义一个变量? int age; age =

10、90; int sum; sum = 0; sum = sum + age; 这是定义和使用一个值类型变量的基本方法。 注意: 一个变量必须先定义后使用,并且一定具有某种类型,只能给变量附上相应类型的数据。C#是强类型语言。,C#语言的变量、数据类型,变量的命名规则 1)变量名必须使用英文字母,数字和下划线,并且必须以字母或下划线开头。 2)变量名区分大小写。比如:int age;int Age;age和Age是两个不同的变量。 3)变量名不能与C#的关键字重名。,C#语言的变量、数据类型,深入C#语言的数据类型 int i; i = 1; string s; s = i.ToString()

11、;,C#语言的变量、数据类型,深入C#语言的数据类型通用类型系统 C#的基本数据类型都以平台无关的方式来定义。C#的预定义类型并没有内置于语言中,而是内置于.NET Framework中。.NET使用通用类型系统(CTS)定义了可以在中间语言(IL)中使用的预定义数据类型。 例如,在C#中声明一个int变量时,声明的实际上是CTS中System.Int32的一个实例。这具有重要的意义: (1)确保IL上的强制类型安全; (2)实现了不同.NET语言的互操作性; (3)所有的数据类型都是对象。它们可以有方法,属性。,C#语言的变量、数据类型,数据类型的转换 1.值类型间的转换 2. 装箱和拆箱:

12、在值类型和引用类型间转换,C#语言的变量、数据类型,数据类型的转换 1.值类型间的转换 隐示转换:如果将一个值从范围较窄的数据类型转换为范围较宽的数据类型,可以使用隐含转换。 int num1 = 1000; double num2; num2 = num1; 显示转换:在不能使用隐士转换时就必须使用强制转换。在前面使用(目标数据类型) num1 = (int)num2;,C#语言的变量、数据类型,数据类型的转换 2. 装箱和拆箱:在值类型和引用类型间转换 int myInt = 12; object obj = myInt; /boxing int myInt2 = (int)obj; /u

13、nboxing,C#语言的变量、数据类型,值类型用法示例,static void Main(string args) bool flag = true; short a = 19; int i = (int)3.0; float f = 3.14F; string str = “Tom“; Console.WriteLine (“布尔值 = “ + flag ); Console.WriteLine (“短整型值 = “ + a ); Console.WriteLine (“整型值 = “ + i ); Console.WriteLine (“浮点值 = “ + f); Console.Wri

14、teLine (“字符串值 = “ + str ); ,int i=3.0; float f=3.14; double f=3.14; float f=(float)3.14; ,C#语言的变量、数据类型,用法示例bool型,基本用法: bool b1 = true; /不是True bool b2 = ( x=1 示例: if (b2) else ,int x = 0, y; if (x) y=0; else y=1; ,思考 结果如何,C#语言的变量、数据类型,注意,int x = 0; if (x) 可用 if ( x!= 0 ) 进行显式比较 或者用转换函数 if (System.Co

15、nvert.ToBoolean(x) /非0为true,无法将类型int 隐式转换为bool,C#语言的变量、数据类型,值类型用法示例,char ch = A; char ch = 101; / 用8进制数表示ASCII字符,最多3位 char ch = x41; /用2位16进制数表示ASCII字符 char ch = x0041; /用低2位16进制数表示ASCII字符 char ch =u0041; /Unicode字码,必须4位16进制数 char MyChar = 65; /: integral type cannot fit in char char MyChar = (char)

16、65; /: Cast from integral type int a=MyChar; /: implicit conversion to int,C#语言的变量、数据类型,C#语言的变量、数据类型,程序练习,using System; public class BoolTest public static void Main() Console.Write(“Enter a character: “); char c = Console.Read(); / 读入一个字符(返回值为int型) if ( ) if ( ) Console.WriteLine(“小写字母.“); else Con

17、sole.WriteLine(“大写字母.“); else Console.WriteLine(“不是字母.“); ,C#语言的变量、数据类型,参考答案,using System; public class BoolTest public static void Main() Console.Write(“Enter a character: “); char c = (char) Console.Read(); / 读入一个字符(返回值为int型) if ( char.IsLetter(c) ) if ( char.IsLower(c) ) Console.WriteLine(“小写字母.“

18、); else Console.WriteLine(“大写字母.“); else Console.WriteLine(“不是字母.“); ,C#语言的变量、数据类型,用法示例string型,string a = “hello“; string b = “h“; b = b + “ello“; /+是连接字符串, b= “hello“ string c = “good “ + “morning“; Console.WriteLine( a != b ); / 输出结果是False Console.WriteLine( (object)a = b ); /结果是False(类型不一致了),stri

19、ng s1=“tom“; string s2=“jerry“; Console.WriteLine( s1 s2 );,思考 结果如何,比较两个字符串的最简单方法是使用 = 和 != 运算符,执行区分大小写的比较。,C#语言的变量、数据类型,C#语言的变量、数据类型,用法示例string型,可以用索引运算符 访问字符串中的各个字符: char x = “test“2; / x = s; 序号从0开始 string s = “u0041“; char c1=s0, c2=s2; / 则c1,c2=?,索引示例: string s=“Printing backwards“; /汉字能行吗? for

20、 (int i = 0; i s.Length; i+) System.Console.Write( ss.Length - i - 1 ); ,C#语言的变量、数据类型,用法示例string型,字符串中可以包含转义符,如: string hello = “HellonWorld!“; 练习: c:myFoldermyFile.txt,string s1 = “c:myFoldermyFile.txt“; / string s2 = “c:myFoldermyFile.txt“; / 不易阅读 改进: C#字符串可以开头,并用双引号引起来: string s3 = “c:myFoldermyF

21、ile.txt“;,C#语言的变量、数据类型,用法示例string型,注意: 若要在一个用 引起来的字符串中包括一个双引号,则应使用两个双引号: 例如: “You!“ cried the captain. 则用: “You!“ cried the captain.“,C#语言的变量、数据类型,用法示例string型,字符串转换为其它型的方法,.Parse() 方法 很重要 Sytem.Convert.() 方法,C#语言的变量、数据类型,用法示例string型.Parse() 方法,int.Parse(string) long.Parse(string) float.Parse(string)

22、 double.Parse(string) bool.Parse(string) char.Parse(string) DateTime.Parse(string),string s1=“123“; int a=int.Parse(s1); string s2 =“123.45“; double f=double.Parse(s2); string s3 = “2008/03/15“; DateTime dt = DateTime.Parse(s3); Console.WriteLine(dt.Year);,C#语言的变量、数据类型,Sytem.Convert.() 方法,C#语言的变量、数据

23、类型,示例,string s1=“123“; int a=System.Convert.ToInt32(s1); /a=123 string s2=“123.45“; double f=Convert.ToDouble(s2); /f=123.45 string s=“true“; / 不区分大小写 bool b=Convert.ToBoolean(s); string s=“2008/03/15“; /一种日期格式 DateTime dt=Convert.ToDateTime(s); Console.WriteLine(dt.Year);,C#语言的变量、数据类型,补充,将数字转换为字符串时

24、,需要使用ToString()方法,或者使用Convert.ToString()方法。 例如: int i=123; textBox1.Text = Convert.ToString(i); textBox2.Text = i.ToString();,C#语言的表达式和控制语句,C#表达式、运算符 表达式是运算符和操作数组成的序列。 1). 附值运算符: = ; *=; +=; -=; /=; %= 2). 算术运算符:+, - , * , /, % 3). 关系运算符: , = , != , = ,is 4) .逻辑运算符: 逻辑与,C#语言的变量、数据类型,用法示例 /、%运算,Conso

25、le.WriteLine(5/2); Console.WriteLine(5.0/2); Console.WriteLine(5/2.0); Console.WriteLine(5.0/2.0); Console.WriteLine(5%2); Console.WriteLine(5.1%2); Console.WriteLine(-5%2);,练习: Console.WriteLine(-1.5%2); Console.WriteLine(-2.5%2);,C#语言的变量、数据类型,用法示例逻辑运算示例,int i = 0; if (i0 ,int i = 0; if (i0 ,&、| 仅在

26、必要时才计算第二个操作数,&、| 两个操作数都要计算,C#语言的表达式和控制语句,C#流程控制语句 选择控制:if else、switch case 循环控制:while、do while、for、foreach 跳转语句:break、continue 异常处理:try、catch、finally,C#语言的表达式和控制语句,C#流程控制语句if选择语句,2) 双向 : if (布尔表达式) /表达式结果为真时运行 else /表达式结果为假时运行 ,1)单向: if (布尔表达式) /表达式结果为真时运行 ,C#语言的表达式和控制语句,C#流程控制语句if、switch选择语句,3)多分支:

27、 if (布尔表达式1) /表达式1结果为真时运行 else if (布尔表达式2) /表达式2结果为真时运行 else if(布尔表达式N) /表达式N结果为真时运行 else /以上表达式都为假时执行 ,switch(控制表达式) case 常量1: /需要执行的程序块 break; case常量2: /需要执行的程序块 break; default: /默认执行的程序块 break; ,C#语言的表达式和控制语句,C#流程控制语句for循环语句,for(初始值表达式;循环条件表达式; 循环后的操作表达式) /执行语句块; ,例子:计算1到100个自然数的和。,C#语言的表达式和控制语句,

28、C#流程控制语句foreach循环语句,foreach (数据类型 循环变量 in 集合) /执行语句块; ,例如: int arr = 1,3,5,2,4,6,8; foreach ( int x in arr ) /x遍历数组元素,C#语言的表达式和控制语句,C#流程控制语句foreach循环语句,示例: int odd = 0, even = 0; int arr = 1,3,5,2,4,6,8; foreach (int x in arr) if (x%2 = 0) even+; else odd+; Console.WriteLine(“奇数个数=0, 偶数个数=1 “, odd,

29、even) ;,C#语言的表达式和控制语句,C#流程控制语句foreach循环语句,示例: string array2 = “hello“, “world“; foreach (string s in array2) System.Console.WriteLine(s); ,C#语言的表达式和控制语句,C#流程控制语句foreach循环语句 编程练习 输入一行字符串,统计字母、数字、空格和其他字符个数。,C#语言的表达式和控制语句,public static void Main() int letters = 0, digits = 0, spaces = 0, others = 0; Co

30、nsole.WriteLine(“请输入一个字符串: “); _; foreach( _ ) if ( _ ) letters+; else if ( _ ) digits+; else if ( _ ) spaces+; else others+; Console.WriteLine(“字母的个数为: 0“,letters); Console.WriteLine(“数字的个数为: 0“, digits); Console.WriteLine(“空格的个数为: 0“, spaces); Console.WriteLine(“其他字符的个数为: 0“, others); ,C#语言的表达式和控制

31、语句,public static void Main() int letters = 0, digits = 0, spaces = 0, others = 0; Console.WriteLine(“请输入一个字符串: “); string input = Console.ReadLine(); foreach(char chr in input) if (char.IsLetter(chr) letters+; else if (char.IsNumber(chr) digits+; else if (char.IsWhiteSpace(chr) spaces+; else others+

32、; Console.WriteLine(“字母的个数为: 0“,letters); Console.WriteLine(“数字的个数为: 0“, digits); Console.WriteLine(“空格的个数为: 0“, spaces); Console.WriteLine(“其他字符的个数为: 0“, others); ,C#语言的表达式和控制语句,C#流程控制语句while循环语句,1)while语句 while(布尔表达式) /要执行的程序段 ,2) dowhile do /要执行的程序段 while(布尔表达式);,例子: 1 计算1到100个自然数的和。,C#语言的表达式和控制语

33、句,C#流程控制语句跳转语句,for(int i; i10; i+) if (i = 6) break; Console.WriteLine(i); ,for(int i; i10; i+) if (i = 6) continue; Console.WriteLine(i); ,Return,C#语言的表达式和控制语句,C#流程控制语句异常处理,try /执行语句块; catch() /异常处理 ,try /执行语句块; catch() /异常处理 finally /非执行不可 释放资源 ,C#语言的表达式和控制语句,C#流程控制语句异常处理,Console.Write(“请输入a=“); s

34、tring a = Console.ReadLine(); try int sum = int.Parse(a); Console.Write(sum); catch Console.Write(“请输入整数!“); ,C#基本输入输出,输出语句: System.Console.Write(); System.Console.WriteLine(); /有换行 输入语句: System.Console.ReadLine(); /读取一行字符 System.Console.Read(); /读取一个字符 (返回值为int型),【返回】,static void Main(string args)

35、Console.Write(“请输入a=“); string a = Console.ReadLine(); Console.Write(“请输入b=“); string b = Console.ReadLine(); Console.WriteLine(“a+b=“ + (a+b) ); ,字符串的连接,示例,static void Main(string args) Console.Write(“请输入a=“); string a = Console.ReadLine(); Console.Write(“请输入b=“); string b = Console.ReadLine(); Con

36、sole.WriteLine(“a+b=“ + (int.Parse(a)+int.Parse(b) ); ,示例,问题:如何输出多个数据 static void Main(string args) Console.Write(“请输入a=“); string a = Console.ReadLine(); Console.Write(“请输入b=“); string b = Console.ReadLine(); int sum=int.Parse(a) + int.Parse(b); Console.WriteLine(“0+1=2“, a, b, sum); ,占位符,数据用逗号分隔,关

37、于输出格式化,int i=123; double j=123.45; Console.WriteLine(i, j); Console.WriteLine(“i=0,j=1“,i,j); /结果 i=123,j=123.45 Console.WriteLine(“i=0,4,j=1,-7“,i,j); /结果 i= 123,j=123.45 Console.WriteLine(“j=0,7:f1“, j); /j=123.5 Console.WriteLine(“j=0:f1“, j); /j=123.5 / f表示浮点数,1表示小数位数(四舍五入) Console.WriteLine(“i=

38、0,7:x“, i); /i=7b Console.WriteLine(“i=0:x“, i); /i=7b / x表示16进制数,4, 7代表宽度,负号表示左对齐,Console.Read()示例,static void Main(string args) Console.Write(“请输入:“); int a = Console.Read(); Console.WriteLine(“该字符ASCII码值:“ + a); Console.WriteLine(“该字符是:“ + (char)a); ,改动一下 static void Main(string args) Console.Wri

39、te(“请输入:“); char a = (char)Console.Read(); /需强制转换为char型 Console.WriteLine(“输入字符:“ + a); Console.WriteLine(“该字符ASCII码值:“ + (int)a ); ,【返回】,数组,C#数组属于引用类型,其基类是System.Array 一维:类型 数组名=new 类型数组大小 二维:类型 , 数组名=new 类型行数, 列数 交错数组 (数组的数组): 例如:int 数组名= new 类型个数 ;,数组下标从0开始,(1) 一维数组,基本用法: int myArr = new int 5; /

40、此时元素初值都为零 int myArr = new int51, 3, 5, 7, 9; int myArr = new int61, 3, 5, 7, 9; 个数不一致 int myArr = new int 1, 3, 5, 7, 9; /数组大小可省略 int myArr = 1, 3, 5, 7, 9; /快捷方式,注意,int myArray; /可先声明后初始化 myArray = new int 1, 3, 5, 7, 9; / OK int myArray; myArray = 1, 3, 5, 7, 9; / Error,(2) 二维数组,int , myArray = ne

41、w int4,2; /此时元素初值都为零 int , myArray = new int4,2 1,2, 3,4, 5,6, 7,8 ; int , myArray = 1,2, 3,4, 5,6, 7,8; int , myArray; /可先声明后初始化 myArray = new int , 1,2, 3,4, 5,6, 7,8 ; / OK myArray = 1,2, 3,4, 5,6, 7,8 ; / Error,要求:列元素个数要一样,二维数组示例,using System; public class ArrayClass static void PrintArray(int,

42、w) for (int i=0; i 4; i+) for (int j=0; j 2; j+) Console.Write(“a0,1=2,-5“, i, j, wi,j); Console.WriteLine(); public static void Main() int, myArr=1,2, 3,4, 5,6, 7,8; PrintArray(myArr); ,改进一下,using System; public class ArrayClass static void PrintArray(int, w) for (int i=0; i = w.GetUpperBound(0); i

43、+) for (int j=0; j = w.GetUpperBound(1); j+) Console.Write(“a0,1=2,-5“, i, j, wi,j); Console.WriteLine(); public static void Main() int, myArr=1,2, 3,4, 5,6, 7,8; PrintArray(myArr); ,GetLowerBound(int) GetUpperBound(int) 返回数组指定维数的下界和上界 维数从0开始,二维数组的属性和方法,GetLowerBound(int)、GetUpperBound(int) 返回数组指定维数

44、的下界和上界,维数从0开始 Array.Length 返回Array数组的所有元素的总数 Array.Rank 返回Array数组的秩(维数) Array.GetLength(int) 返回Array数组的指定维中的元素个数,static void PrintArray(int, w) for (int i = 0; i w.GetLength(0) ; i+) for (int j = 0; j w.GetLength(1); j+) Console.Write(“a0,1=2,-5“, i, j, wi, j); Console.WriteLine(); ,练习,int, myArr =

45、1, 2 ,3, 3, 4,5 , 5, 6 ,7, 7, 8 ,9 ; 则 myArr.Length=? myArr.GetLength(1)=? myArr.Rank=? myArr.GetLowerBound(0)=?,【返回】,(3) 交错数组,交错数组的元素是数组 (“数组的数组“). 交错数组元素的维度和大小可以不同。,列元素个数可不一样,声明方式: int jaggedArr = new int4 ; 初始化方式1: jaggedArr0 = new int6 1,3,5,7,9,11 ; jaggedArr1 = new int2 1, 1 ; jaggedArr2 = new

46、 int3 2,4,6 ; jaggedArr3 = new int5 1,0,0,0,1;,交错数组初始化,初始化方式2: 在声明数组时将其初始化: int jaggedArr = new int4 new int 1,3,5,7,9,11 , new int 1, 1 , new int 2,4,6 , new int 1,0,0,0,1 ;,每个元素都是数组,new不能少,交错数组示例,using System; public class ArrayClass static void PrintArray(int w) for (int i = 0; i w.Length; i+) Console.Write(“第0行: “, i); for (int j = 0; j wi.Length; j+) Console.Write(“0,-2“, wij); Console.WriteLi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1