苏坤讲的C#基础入门.ppt_第1页
苏坤讲的C#基础入门.ppt_第2页
苏坤讲的C#基础入门.ppt_第3页
苏坤讲的C#基础入门.ppt_第4页
苏坤讲的C#基础入门.ppt_第5页
已阅读5页,还剩196页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#编程基础,讲师:苏 坤 QQ:35651998 /anders_sukun,概念:.net与c# (多语言),.net/dotnet:一般指.Net Framework框架.一种平台,一种技术. C#(sharp):一种编程语言,可以开发基于.net平台的应用. (*) Java即是一种技术又是一种编程语言,.net都能干什么,桌面应用程序 Winform Internet应用程序 ASP.NET 手机开发 wp7 C/S:客户机(Client)/服务器模式(Server) qq B/S:浏览器(Browser)/服务器模式(Server),.Net开发学习路线(*),IDE介绍,IDE(Integrated Development,集成开发环境) Visual Studio 2010 简介: 一套完整的开发工具集 用于开发桌面应用程序、ASP.NET Web 应用程序、XML、Web Service、移动应用程序 为快速开发提供强大支持,IDE及.Net 的版本(*了解),.Net 1.1,.Net 2.0,.Net3.x,.Net4.x,Visual Studio2003,Visual Studio2005,Visual Studio2008,Visual Studio2010,向下兼容,.Net 1.0,Visual Studio2002,MSDN介绍,MSDN 的全称是 Microsoft Developer Network。这是微软公司面向软件开发者的一种信息服务。MSDN 实际上是一个以 Visual Studio 和 Windows 平台为核心整合的开发虚拟社区,包括技术文档、在线电子教程、网络虚拟实验室、微软产品下载(几乎全部的操作系统、服务器程序、应用程序和开发程序的正式版和测试版,还包括各种驱动程序开发包和软件开发包)、Blog、BBS、MSDN WebCast、与 CMP 合作的 MSDN 杂志等等一系列服务。,点击查看msdn百科,Visual Studio介绍1,安装 setup.exe install.exe autorun 启动 创建解决方案/项目 认识vs的各部分(菜单/快捷键/工具栏/窗口) VisualStudio各个视图的打开、开发环境的重置 C#源文件(类)一般以cs结尾 C#程序的入口是Main函数,在Main中写代码就行,暂时不用关心其他部分是什么意思,Visual Studio介绍2,保存项目,打开项目. 交作业交哪些文件. 作业的命名格式:苏坤512.rar 先学习两句话: Console.WriteLine(“Hello,World!“); Console.ReadKey(); 每一句话以;号结束 生成程序 运行一下生成的.exe程序 设置字体及行号显示 创建多个项目 启动项目设置 项目的加载与卸载,c#中的注释符,注释方式: /单行注释 /* */多行注释 / /文档注释 /,小练习,练习:编程输出以下内容 自己练习一下三种注释符: 第一种:单行注释 以/开头,后面的就是注释内容 第二种:多行注释 以 /*开头 */结束 之间的是注释内容 第三种:文档注释 在方法或类的上一行输入 /就会产生,计算机使用基本技巧,常用键介绍: Home/End/PageUp/PageDown/Shift/c+h/c+end 一段文字的删除.(del/backspace) ctrl+a ctrl+kf 学会使用复制粘贴。Ctrl+c/v/x 对话框中的使用 插入、覆盖模式的困惑。 学会使用Ctrl+Z撤销上一次操作 ;,()“等的的全角半角问题。 出错:意外的字符“ VS窗口的拖拽 遇到异常、报错不要慌。 目前经常用到的快捷键:F5 F6 #region和#endregion,操作系统 一般 Windows,公共语言运行库 (CLR),VC+.NET,C#,VB.NET,VJ#,.NET Framework 类库 (FCL),软件系统依赖关系(*),北京传智播客教育 ,.Net简介(*了解),.Net Framework类库,CLR公共语言运行时,操作系统,应用程序,应用程序,操作系统,平台无关:CLR、.Net Framework进行了隔离。Windows、Linux(Mono)、智能手机、Web。学会.Net什么都能开发,知识移植。,更安全、更省心:代码托管、罕用指针、垃圾回收。,语言无关:VB.Net、C#都调用同样的类、同样的方法,VB.Net写的类C#也可以调用。模糊了语言的差别,.net是如何实现语言无关性的(*),C#,VB.NET,代码被执行,MSIL,CLR,通用语法,计算机不用了解,CLR执行IL,C#编译器,VB.NET编译器,基本框架类,WinForms,ADO.NET 和 XML 类,.NET Framework,.NET Framework 类库,ASP.NET,CLS,CLR,CTS,变量1,计算机使用内存来存储数据. 我们在计算机中存储数据和客人住旅馆很类似.,我们住旅馆一般要做以下事情: 1、开房间(单人间、双人间、总统套间) 2、入住,变量2,要在计算机中存一个数字1000,需要两句话. int a; /开一个能放数字的空间 a=1000; /把1000放进去. 声明变量的语法格式: 数据类型 变量名; 赋值: 变量名=值; 可以 a=3.14; 吗?,变量3,计算机中各式各样的数据 3 3.14 100 the quick brown fox jumps over the lazy dog 张三 李四 True 2011-3-6,*更多的数据类型,C#中的数据,int: 3 5 100 -10 double: 3.14 10.5 -3.14 -5.0 char : A b a string : “Zhangsan” “李四” “计算机” “HelloWorld” “a“ decimal:存储金钱 5.62 decimal d=5.55m; decimal d1=5;,变量的声明方法,A)数据类型 变量名称; int age; 变量的赋值 age=18; B)定义时赋值,数据类型 变量名称=值; int age = 18; C)如果一次要声明多个相同类型的变量可用逗号分隔. string zsName,lsName; 变量一定要先声明,再赋值,才能使用. 练习:定义一个变量pi,并把3.14存进去,然后显示在屏幕上? 想一想下面代码的输出结果是? int i=10;Console.WriteLine(“i“);,变量的命名,命名规则: 1 必须以“字母”_或符号开头.-不要以数字开头 2 后面可以跟任意“字母”、数字、下划线. 注意: 1)你起的变量名不要与c#系统中的关键字重复. 2)在c#中,大小写是敏感的. 3)同一个变量名不允许重复定义(先这么认为,不严谨) 定义变量时,变量名要有意义 C# 变量命名编码规范Camel 命名法: 首个单词的首字母小写,其余单词的首字母大写。 Pascal命名规范:每一个单词第一字母都大写 如果使用到英文单词的缩写,全部用大写!,下面的变量名称哪些正确?,principal,cost_price,marks_3,$lastname,city,123rate,discount%,zip code,City,int,赋值运算符和赋值表达式,赋值运算符:= a=a+1; 这里的=号是赋值运算符,不是数学义意上的相等. 变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不复存在了. 右边代码的输出结果:,演示:,定义一个变量存储客户的姓名,然后在屏幕上显示:”你好,某某”. 某某代表客户的姓名 +号可以连接两个字符串,这里的“+”号表示连接的意思,练习:,1. 定义3个变量,分别存储一个人的姓名(张三),年龄(28),和工资(7600.33).然后在屏幕上显示,我叫XX,今天X岁了,我的工资是XX元. 2. 定义一个变量存储一个人的年龄(18),然后发现这个人的年龄不是18岁,要把这个人的年龄修改成20岁(本题体会变量可以被重复多次赋值),最后把这个人的年龄输出到屏幕上?,变量练习,3.定义四个变量,分别存储一个人的姓名、性别、年龄、电话。然后打印在屏幕上 (我叫X,我今年 X岁了,我是X生,我的电话是XX) 4.在屏幕上输出:我的手机是philips 型号:998 价格:1500元 重量:0.3kg 请定义变量存存储上面的值,并显示在屏幕上. 5.定义两个变量如:a b分别赋值为10和5,写程序交换两个变量的值,字符串类型,再学习一句话:Console.ReadLine(); 用于接收用户的输入.要定义一个字符串变量来接收变存储用户输入的值. 1.练习:问用户喜欢吃什么水果,假如用户输入”苹果”,则显示”哈哈,这么巧呀,我也喜欢吃苹果” 2.练习:请用户输入姓名,然后在屏幕上显示“你好,XXX“. XXX为用户刚刚输入的姓名.,字符串中的转义,能在字符串中输出双引号吗? 在屏幕上显示: c#中的字符串用” ”号包含起来 +一个字符,组成转译字符.一般用于表示特殊符号 字在字符串前面表示不转译 常用的转译符:n b t ”,算术运算符及算术表达式,算术运算符: + - * / %(取余数 取模) 算术表达式:由算术运算符连接起来的式子.如:1+1 a-b(变量ab前面已声明并赋初值) 演示:某学生三门课成绩为,语文:90 数学:80 英语:91,编程求总分和平均分. 优先级:先乘除,后加减,有括号先算括号里的,相同级别的从左至右运算 5+3*2 小括号可以无限制的套用,但一定要成对出现.,练习,练习1:定义两个数分别为10和20,打印出两个数的和。 练习2:计算半径为5的圆的面积并打印出来. 练习3:某商店T恤的价格为35元/件,裤子的价格为120元/条.小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?,算术运算符-自动类型转换,下面代码的输出结果是什么? int a = 10, b = 3; int mod = a % b; double quo = a / b; Console.WriteLine(mod); Console.WriteLine(quo);,类型自动转换规则,参与运算(算术运算和赋值运算)的操作数和结果类型必须一致. 当不一致时,满足下面条件时,系统自动完成类型转换 两种类型兼容 例如:int 和 double 兼容 目标类型大于源类型 例如:double int 对于表达式 如果一个操作数为double型,则整个表达式可提升为double型 比如前面打8.8折的练习题. 求10/3求余数要想得到3.333的处理.,强制类型转换,如上题中打完8.8折后出现小数,商店为了结算方便,只收用户整数部分的钱,如本应收用户303.6,现在只收用户303元,应该如何做? 语法: (数据类型名)待转换的值; 如: int b = (int)3.14; 强制类型转换,数据类型一定要相兼容 下面的写法对吗? int number = (int)”3.14”;,类型转型,问题:让用户输入他的语文和数学成绩,计算他的总成绩并显示出来? Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程 通过 Convert.ToInt32(能转换成int类型的数据)来把其他类型数据转换成int类型 练习: 让用户输入姓名 语文 数学 英语 三门课的成绩,然后给用户显示:XX,你的总成绩为XX分,平均成绩为XX分。,练习,练习,编程实现计算几天(如46天)是几周零几 天. 练习:编程实现107653秒是几天几小时几分钟几秒? 修改上面的题目,让用户输入.,算术运算符和复合赋值运算符,+ 自加一 有前加和后加 - 自减一 有前减和后减 一元运算符+/-比二元的+-优先级高 += -= *= /= %=,练习:,1 请说出上面程序执行完成后,var1中的值? 上题中如果改成: Var1=+var2 * var3-; Var1=?,关系运算符(比较运算),,=,老鼠的重量(1) 兔子的寿命(3)乌龟的寿命(1000) 3918 我的年龄(20)=你的年龄(20) 比大比小的结果是什么?,什么是bool类型(布尔),在计算机中,我们用什么数据类型来表示一句话的对错?一个条件的成立与不成立? 布尔(bool)类型: bool值只有两个 真:ture 假:false 关系运算的结果是布尔类型的 如在计算机中描述张三(20岁)比李四(18)小,这句话的结果. 练习看看上一页ppt中四句话的结果,逻辑运算符,& | ! 表达式1&表达式2:当表达式1、2全为ture时,其表达式的结果为true 表达式1|表达式2:当表达式1、2有一个为ture时,其结果为ture !表达式:如果表达式的结果为true,则取反后为false,反之为true 优先级,练习:,让用户输入张三的语文和数学成绩,输出以下判断是否正确,正确输出True,错误输出False 1)张三的语文和数学成绩都大于90分 2)语文和数学有一门是大于90分的,练习:,写下判断闰年的表达式,设待判断的年份变量为year. 润年的判定(符合下面两个条件之一): 年份能够被400整除.(2000) 年份能够被4整除但不能被100整除.(2008) 让用户输入一个年份,如果是润年,则输出true,如果不是,则输出false. 2100/1600/1800/2009年是闰年吗?,if结构,编程实现:如果张三的考试成绩大于90分,那么爸爸奖励他100元钱. 使用if结构可以实现上面的问题 if结构的基本语法: if(条件) if (条件) 语句; 语句1;语句2; 用一对大括号来组成语句块,练习:,让用户输入年龄,如果输入的年龄大于18(含)岁,则给用户显示你已成年. 如果张三的 语文成绩大于90并且音乐成绩大于80 语文成绩等于100并且音乐成绩大于70,则奖励100元. 让用户输入用户名和密码,如果用户名为admin,密码为mypass,则提示登录成功.,if-else,如果张三的考试成绩大于90(含)分,那么爸爸奖励他100元钱,否则的话,爸爸就让张三写学习总结. 使用if能否实现. 更好的实现,if-else 语法: if(条件) 语句1; else 语句2;,练习:,1、盖茨买了一筐鸡蛋,如果坏蛋少于5个,他就吃掉,否则他就去退货 2、 要求用户输入两个数a、b,如果a能被b整除或者a加b大于100,则输出a的值,否则输出b的值 3、对学员的结业考试成绩评测(考虑用if好还是用if-else好) 成绩=90 :A 90成绩=80 :B 80成绩=70 :C 70成绩=60 :D 成绩60 :E,if-else if,对学员的结业考试成绩评测 成绩=90 :A 90成绩=80 :B 80成绩=70 :C 70成绩=60 :D 成绩60 :E 用if-else实现? 更好的方法:if-else if,if-else if流程图,课上练习,学编程不是看书,不是听老师讲,而是自己动手写。 练习1:提示用户输入密码,如果密码是“888888”则提示正确,否则要求再输入一次,如果密码是“888888”则提示正确,否则提示错误,程序结束。 练习2:提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“888888”,则提示正确,否则,如果用户名不是admin还提示用户用户名不存在,如果用户名是admin则提示密码错误. 练习3:提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于10岁,则告知不允许查看,如果大于等于10岁并且小于18,则提示用户是否继续查看(yes、no),如果输入的是yes则提示用户请查看,否则提示“退出,你放弃查看“。,为什么使用switch,李四的年终工作评定,如果定为A级,则工资涨500元,如果定为B级,则工资涨200元,如果定为C级,工资不变,如果定为D级工资降200元,如果定为E级工资降500元. 设李四的原工资为5000,请用户输入李四的评级,然后显示李四来年的工资.,switch-case,switch-case语法: switch(表达式/变量) case 值1: 语句块1; break; case 值2: 语句块2; break; default:语句块3; break; ,if-else if与switch的比较,相同点:都可以实现多分支结构 不同点: switch:一般 只能用于等值比较 if-else if:可以处理范围,练习:,说出已学过的数据类型有哪些? 举例说明已学过的运算符有哪些? 请用户输年份,输入月份,输出该月的天数. 对学员的结业考试成绩评测(改成用Switch来做) 成绩=90 :A 90成绩=80 :B 80成绩=70 :C 70成绩=60 :D 成绩60 :E,循环结构,实际生活中的循环:打印100份试卷 10000米长跑 车轮 李四这次考试又粗心了,爸爸让他写1000遍“下次考试一定要细心“. 如何编程实现上面的问题? Console.WriteLine(“下次考试一定要细心“); Console.WriteLine(“下次考试一定要细心“); Console.WriteLine(“下次考试一定要细心“); ,使用循环解决,聪明的解决方法: int i=0; while(i1000) Console.WriteLine(“下次考试一定要细心“); i+; ,while,语法: while(循环条件) 循环体; ,特点:先判断,再执行,练习:,打印100次“欢迎您来传智播客学习“ 输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩 老师问学生,这道题你会做了吗?如果学生答“会了(y)“,则可以放学.如果学生不会做(n),则老师再讲一遍,再问学生是否会做了 直到学生会为止,才可以放学. 直到学生会或老师给他讲了10遍还不会,都要放学 2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?,do-while,明天小兰就要登台演出了,老师说再把明天的舞蹈表演一遍,如果满意,小兰就可以回家了.否则就需要再练习一遍,直到老师满意为止. while or do-while ? do-while为先执行,再判断 do循环体; while(条件);,练习:,练习1:计算1到100之间整数的和; 练习2:要求用户输入用户名和密码,只要不是admin、888888就一直提示用户名或密码错误,请重新输入。 练习3:不断要求用户输入学生姓名,输入q结束. 练习4:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出。 练习5:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值 练习6:张三先唱一遍要表演的歌曲,老师觉得张三唱歌不过关,就让张三再唱一遍,老师满意则张三可以下课,不然则需要再唱一遍,再问老师是否满意.,while与do-while区别,通过练习,希望大家已经掌握这两种循环. 语法不同 初始值不满足循环条件时: while循环一次都不执行 do-while循环会执行一次,程序调试,设置断点 单步运行 观察变量,for,连续输出100次“我下次一定细心“. 比较用for和while,哪种更好? 问题1:求1-100间的所有偶数和? 问题2:找出100-999间的水仙花数? 问题3:输出九九乘法表(循环的嵌套) 语法: for(表达式1;表达式2;表达式3) 循环体; ;,练习:,Break,break用于循环中,退出当前循环.,练习:,练习1:循环录入5个人的年龄并计算平均年龄,如果录入的数据出现负数或大于100的数,立即停止输入并报错. 练习2:在while中用break实现要求用户一直输入用户名和密码,只要不是admin、888888就一直提示要求重新输入,如果正确则提登录成功. 1100之间的整数相加,得到累加值大于20的当前数,continue,立即结果本次循环,判断循环条件,如果成立,则进入下一次循环,否则退出循环. 举例:运动员跑步喝水的例子,练习,练习1:用 while continue实现计算1到100(含)之间的除了能被7整除之外所有整数的和。,小节,顺序结构:语句顺序执行 分支结构:语句在满足条件下执行 if, if-else, if-else if, switch-case 表1?表2 :表3(三元) 循环结构:语句在满足条件下循环执行多次 while, do-while, for 跳转语句 break, continue,goto,枚举常量结构,确定数量、确定值的几个取值:东西南北、男女、上中下。,enum Gendermale,female enum QQStatusonline,offline,hidden,枚举的用法,QQStatus status = QQStatus.online; 和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程序处理起来更方便。,const 类型 常量名 = 常量值,static void Main(string args) const int PI = 3.14; PI = 3.20; ,字符串与枚举的转换,public enum Gender male, famale / Console.WriteLine(“你的性别:0.“,Gender.male.ToString();,(Gender)(Enum.Parse( typeof(Gender),“male“);,每一个值都对应一个数字 典型的枚举类型:MessageBox.Show的参数(后面会学到),结构体,为什么要使用结构,例如c#中Color Point都是结构,访问修饰符 struct 结构名 定义结构成员 ,public struct Person public string Name; public int Age; public string Hobby; public int Popularity; public void SayHi() / . ,练习:,1 定义一个结构叫MyColor,有三个成员,分别为red,green,blue 声明一个 MyColor类型的变量,并对其成员赋值.使MyColor可以表示成一个红色. 2 定义一个结构类型Person,有三个成员,分别为姓名,性别,年龄 声明两个Person类型的变量,分别表示 张三 男 18岁/ 小兰 女 16岁,数组,一次语文测试后,老师让班长统计每一个学生的成绩并计算全班(全班共60人)的平均成绩,然后把所有成绩显示出来. 如何声明变量? 好的解决方法,使用数组.,数组,保存多个值。几乎任意类型都可以声明数组。,int nums = 5,3,8,int nums = new int3,int nums = new int35,3,8/个数和声明数必须一致 int nums = new int55,3,8/错误 int nums = new int5,3,8/正确,可以省略数组个字 使用索引器访问指定编号位置的元素,访问数组元素:nums0、nums1。索引从0开始。取到的元素的类型就是数组元素的类型。还可以对数组元素进行赋值,数组的声明 数组的赋值与取值 常见问题:求平均值,求最大值,求和,排序,练习:,练习1:从一个整数数组中取出最大的整数 练习2:计算一个整数数组的所有元素的和。 练习3:将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|郑大世” 练习4:将一个整数数组的每一个元素进行如下的处理:如果元素是正数则将这个位置的元素的值加1,如果元素是负数则将这个位置的元素的值减1,如果元素是0,则不变。 练习5:将一个字符串数组的元素的顺序进行反转。“3”,“a”,“8”,“haha” “haha”,“8”,“a”,“3”。第i个和第length-i-1个进行交换。 求平均值,求最大值,求和,try-catch的使用(简单用法),try 有可能出现错误的代码; catch 如果try中的代码出现异常,则进去catch中 ,方法(函数)介绍,函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。 string s=Console.ReadLine()就是一个有返回结果的函数;Console.WriteLine(“hello“)就是一个有执行参数的函数,只有告诉WriteLine被打印的数据它才知道如何打印;int i=Convert.ToInt32(“22“)则是一个既有参数又有返回值的函数。 有了函数写代码就像拼积木,C#中的各种各样的技术其实就是通过for、if等这些基础的语法将不同的函数按照一定的逻辑组织起来。,方法,方法的定义: 访问修饰符 static 返回值类型 方法名() 方法体; 命名规则:方法名开头大写,参数名开头小写,参数名、变量名要有意义 方法的调用,对于静态方法,如果在同一个类中,直接写名字调用就行了. return可以立即退出方法.,常用的已经学过的方法:,Console.WriteLine(); Console.Write(); Console.ReadLine(); Console.ReadKey(); int.Parse(string); Convert.ToInt32(string); 对于由static修饰的方法,使用:类名.方法名()调用. 如果在类中调用自己的由static修饰的方法,可以省略类名.,变量的作用域(只讲局部变量),阅读下面的程序,说一下输出结果是多少?,变量的作用域,在方法中定义的变量称为局部变量,其作用域从定义开始,到其所在的大括号结束为止. 在一个方法中想要访问另一个方法中的变量,怎么办? 两种解决方法:参数和返回值 举例:写一个方法,判断一个年份是否是润年. 方法中的return语句 导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中return 值,练习,自己写一个方法,1 读取输入的整数,定义成方法,多次调用(如果用户输入的是数字,则返回,否则提示用户重新输入) 2 还记得学循环时做的那道题吗?只允许用户输入y或n,请改成方法 3查找两个整数中的最大值:int Max(int i1,int i2) 4计算输入数组的和:int Sum(int values),思考:,即然Console.WiteLine()是方法,那么为什么WiteLine的参数可以是字符串类型,也可以是数字类型,还可以是布尔类型char类型呢? 为什么要有方法的重载?,函数重载(函数重名),函数的重名: static void SayHello(string name) Console.WriteLine(“我是0“,name); static void SayHello(string name) Console.WriteLine(“I am0“,name); ,static void SayHello(string name) Console.WriteLine(“我是0“,name); static void SayHello(int age) Console.WriteLine(“我的年龄0“,age); ,static void SayHello(string name) Console.WriteLine(“我是0“,name); static int SayHello(string name) return 10; ,static void SayHello(string name) Console.WriteLine(“我是0“,name); static void SayHello(string name,string nickname) Console.WriteLine(“我是0,昵称是1“,name,nickname); ,构成重载的条件:参数类型不同或者参数个数不同(不严谨的),与返回值无关。,思考:,方法只能返回一个值,当需要返回多个值时怎么办? 例如: 写一个方法,计算一个int类型数组中每个元素的总和 和 最大值与最小值?,方法的out参数和ref参数(*),函数参数默认是值传递的,也就是“复制一份”,例子: int age=20; IncAge(age); Console.WriteLine(“age=0“,age); out则是内部为外部变量赋值,out一般用在函数需要有多个返回值的场所。 例:int.TryParse。,方法的练习:,重复让用户输入一个数,判断该数是否是质数,输入q结束? 质数的判断用方法来实现 将一个字符串数组输出为|分割的形式,比如“梅西|卡卡|郑大世”(用方法来实现此功能) 用方法实现找出一个int类型数组中最大值和最小值 写一个方法,实现MyTryParse的功能,面向对象概念,世界是由什么组成的: 化学家 画家 程序员 万物皆对象 试着描述杨老师和学生张三的特征和行为,属性对象具有的各种特征 每个对象的每个属性都拥有特定值 例如:杨老师和张三的年龄不一样. 属性:姓名,性别,年龄 属性的值: 方法: 行为,动作.执行的操作. 方法:杨老师的行为,上课. 学生的行为,学习,练习:,说说教室里有哪些对象?这些对象有哪些属性和方法? 比如:电脑/灯/音箱等等 一切皆对象,找出下列对象共性,张三(一个学生)杨老师邻居售货员张阿姨李四的爸爸李四的妈妈 门口停的奔驰S320汽车/老师开的QQ汽车/杨老师的解放牌大货车 类:类是模子,确定对象将会拥有的特征(属性)和行为(方法) 类是对象的类型 人类 解俊峰; int a;,类和对象的区别,类是抽象的概念,仅仅是模板,比如说:“人”类 对象是一个你能够看得到、摸得着的具体实体 “人“类都有:姓名性别年龄 属性,有说话的方法. 张三是一个对象,他的姓名属性的值:张三 性别的属性的值:男 年龄属性的值:20 张三会说话 对象可以叫做类的实例(Instance) 类不占内存,对象才占内存.,类的定义,定的定义语法: 访问修饰符 class 类名 成员; 类中可以包含变量的定义、方法。 请练习定义一个人类.人类分别用三个变量来表示姓名性别年龄,有一个打招呼的方法,有一个走路的方法.,类的实例化,类的实例化,用关键字new 语法: 类 实例名 = new 类(); 类的成员的访问: 实例名.属性 实例名.方法名(); 字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。 访问修饰符:public private (internal protected),属性,字段用public修饰的问题. 属性的定义.get;set; 属性是为了保护与之相对应的字段的.保证对字段的读取和赋值符合要求. 属性可分为:读写、只读、只写。 允许外部访问的变量一定要声明为属性。,类的练习:,定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩。 有2个方法: 一个打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。 两个计算自己总分数和平均分的方法。显示:我叫XX,这次考试总成绩为X分,平均成绩为X分 实化两个对象并测试: 张三 男 18 三科成绩为:90 95 80 小兰 女 16 三科成绩为:95 85 100,类的构造方法,构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。 构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。 构造函数可以有参数,new对象的时候传递函数参数即可 如果不指定构造函数,则类有一个默认的无参构造函数。如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。 构造函数可以重载,也就是有多个参数不同的构造函数。 认识类图,c#中的类图和通用类图,析够函数(*) ,不能在结构中定义析构函数。只能对类使用析构函数。 一个类只能有一个析构函数。 无法继承或重载析构函数。 无法调用析构函数。它们是被自动调用的。 析构函数既没有修饰符,也没有参数。,练习1,给前面写的学生类添加构造方法.使在实例化学生类的时候可以通过构造方法对姓名性别年龄语数英等属性赋值,也可以只对姓名和性别赋值.年龄默认为18岁,语数英成绩默认为0分.,练习2:,写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离计算价格(1元/公里): 0-100公里 票价不打折 101-200公里 总额打9.5折 201-300公里 总额打9折 300公里以上 总额打8折 有一个方法,可以显示这张票的信息. 测试上面的类.,临时加(根据学生问题添加),参数中使用out 和 ref的区别 数组做为参数 param,命名空间,namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。 如果代码和被使用的类在一个namespace则不需要using。 在不同命名空间下的类调用有两种方法: 写全称 命名空间.类名 先using引用命名空间,再调用,字符串的处理,string可以看做是char的只读数组。char c = s1;。例子:遍历输出string中的每个元素。 C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。 如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char)这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。,字符串,练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度 Length:可以得字符串的长度 练习二:两个学员输入各自最喜欢的课程名称,判断是否一致,如果相等,则输出你们俩喜欢相同的课程.如果不相同,则输出你们俩喜欢不相同的课程. 上题中两位同学输入 c#和 C#代表同一门课,怎么办? 字符串的连接+,两边只要有一个是字符串类型,另一个也会被自动转换成字符串类型 一切类型都可以调用.ToString()方法转换成字符串类型.,常见疑问,谁说字符串不可变?string s = “abc“;s=“123“,s这不是变了吗 要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。 string s10 = s1;/s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他内存,那么s10还是指向“hello“,abc,admin,888888,s1,s1,String类常用方法,ToLower():得到字符串的小写形式。 注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。s.ToLower()与s=s.ToLower() ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。 s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两个字符串进行比较不区分大小写的比较。 s1=s2,字符串的分割,string Split(params char separator):将字符串按照指定的分割符分割为字符串数组; string Split(char separator, StringSplitOptions options)将字符串按照指定的char分割符分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串); 练习:从日期字符串(“2008-08-08“)中分析出年、月、日;2008年08月08日。 让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日,字符串函数详解,字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。 取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串; string Substring(int startIndex, int length),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。 bool Contains(string value)判断字符串中是否含有子串value bool StartsWith(string value)判断字符串是否以子串value开始; bool EndsWith (string value)判断字符串是否以子串value结束; int IndexOf(string value):取子串value第一次出现的位置。 Int IndexOf(string value,int startIndex),字符串常用方法:,学习查看msdn,字符串的处理练习,课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。“abc“cba“ 课上练习2:接收用户输入的一句英文,将其中的单词以反序输出。“hello c sharp“sharp c hello“ 课上练习3:从Email中提取出用户名和域名:。 课上练习4:文本文件中存储了多个文章标题、作者,标题和作者之间用若干空格(数量不定)隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10,如果超过10,则截取长度8的子串并且最后添加“.”,加一个竖线后输出作者的名字。 让用户输入一句话,找出所有e的位置,对象的引用(非常重要),举例:结构版的Person的赋值 与 类版的Person的赋值 int、decimal、bool、double byte 枚举结构等类型(值类型)是传递拷贝;对象(引用类型)则是传递引用。 方法间传递对象。,.net中哪些是值类型?哪些是引用类型?,为什么要继承,分别写一个Teacher类和一个Student的类 ,分析他们应该有哪些属性和方法. 假如系统还要再加入班主任类、校长类、家长类试分析这几个类的属性? 代码冗余,怎么解决?,冗余的解决方案,继承的符号:,利用继承实现Student类和Teacher类继承自Person类. Student类和Teacher类继承父类的属性和方法. Student类和Teacher类还有自己独有的属性和方法.,继承的使用,class Student:Person; class Teacher:Person; 子类继承了父类的成员,子类还可以有自己的成员. Person叫做父类(基类) Student和Teacher叫子类(派生类) Student继承了Person类 Person类派生了Teacher类 在c#中,所有的类都直接或间接的继承自了object类.(当我们定义一个类的时候,如果没有写:继承一个类,那么这个类就继承了object类),练习:,写一个Student类和一个Teacher类,他们都有一个打招呼的方法,不同的是Studetn打招呼是说“大家好,我叫XX,我今年XX岁了,我的爱好是XXX“,Teacher的打招呼的方法是说“大家好,我叫XX,我今年XX岁了,我已经工作XX年了“?,显示调用父类的构造方法,实例化子类时是否调用了父类的构造方法?顺序如何? 利用构造方法设置公共属性,也就是说若父类的构造方法有参数,应该如何处理呢? 显示调用父类的构造方法,关键字: base,protected,protected访问修饰符不允许其他非子类访问 修改刚刚的练习,父类中把访问修饰符改成protected子类中还能被调用到吗?其他非子类能调用吗? 继承的传递性. 继承的单根性.,类型转换(lsp),Person p = new Teacher(); 子类可以隐式的转换成父类. Teacher t=(Teacher)p; is和as typeA is type B 仅判断 typeA as TypeB 先判断,再转换,练习:,自己定义一个父类Person,两个子类Teacher和Student类.Person写一个有参数的构造方法. 自己试试,子类可以自动转父类,父类转子类要通过强转.为了不出错,可以先通过is判断或用as转换.,ArrayList和HashTable,为什么要用ArrayList和HashTable ArrayList元素的增加、插入、删除、清空、排序、反转。 HashTable的增、删、查、判存。 foreach,异常与异常处理,传统的错误表示方式:错误码。举例。需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预置的错误。陈摄影师以为文件已经被删除造成的麻烦。 错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。 try catch。Exception ex 异常也是对象。 Exception 类主要属性:Message、StackTrace 发生异常后程序默认就退出了,try代码块中的后续代码不会被执行。catch以后的代码则会继续执行。 不要吃掉异常,一般情况下不需要处理异常。 扔出自己的异常,扔:throw,抓住:catch,索引器,C#中提供了按照索引器进行访问的方法 定义索引器的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论