播客.net基础第09-今天和明天_第1页
播客.net基础第09-今天和明天_第2页
播客.net基础第09-今天和明天_第3页
播客.net基础第09-今天和明天_第4页
播客.net基础第09-今天和明天_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

面向对象概念(S)世界是由什么组成的:数学家,摄影家.画家程序员万物皆对象试着描述赵老师和学生张三的特征和行为属性——对象具有的各种特征每个对象的每个属性都拥有特定值例如:赵老师和张三的年龄不一样.属性:姓名,性别,年龄属性的值:方法:行为,动作.执行的操作.方法:杨老师的行为,上课.

学生的行为,学习听老师讲课练习:说说教室里有哪些对象?这些对象有哪些属性和方法?比如:电脑/灯/音箱等等桌子,椅子一切皆对象找出下列对象共性张三(一个学生)\杨老师\邻居售货员张阿姨\李四的爸爸\李四的妈妈姓名、性别、年龄、身高、体重...吃喝拉撒睡门口停的奔驰S320汽车/老师开的QQ汽车/杨老师的解放牌大货车,牛老师开的宝马自行车车洋气贵类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)类是对象的类型人类张三;intnumber;类和对象的区别类是抽象的概念,仅仅是模板,比如说:“人”类对象是一个你能够看得到、摸得着的具体实体"人"类都有:姓名\性别\年龄属性,有说话的方法.张三是一个对象,他的姓名属性的值:张三性别的属性的值:男年龄属性的值:20张三会说话对象可以叫做类的实例(Instance)类不占内存,对象才占内存.类的定义定的定义语法:[访问修饰符]class类名{成员;......}类中可以包含变量的定义、方法。请练习定义一个人类.人类分别用三个变量来表示姓名性别年龄,有一个打招呼的方法,有一个走路的方法.类的实例化(S)类的实例化,用关键字new

语法:类实例名=new类();类的成员的访问:实例名.属性实例名.方法名();字段、方法、属性(后面讲)都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的.访问修饰符:publicprivate(internalprotected)属性字段用public修饰的问题…用private属性的定义.get;set;属性是为了保护与之相对应的字段的.保证对字段的读取和赋值符合要求.属性可分为:读写、只读、只写。允许外部访问的变量一定要声明为属性。类的练习:Student定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩。有2个方法:一个打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。两个计算自己总分数和平均分的方法。{显示:我叫XX,这次考试总成绩为X分,平均成绩为X分}实化两个对象并测试:张三男18三科成绩为:909580小兰女16三科成绩为:9585100类的构造方法(S)构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。构造函数可以有参数,new对象的时候传递函数参数即可如果不指定构造函数,则类有一个默认的无参构造函数。如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。构造函数可以重载,也就是有多个参数不同的构造函数。认识类图c#中的类图和通用类图-age:int-name:string+Name:string类名Student+SayHi():void析够函数(*)~不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。练习1给前面写的学生类添加构造方法.使在实例化学生类的时候可以通过构造方法对姓名性别年龄语数英等属性赋值,也可以只对姓名和性别赋值.年龄默认为18岁,语数英成绩默认为0分.张三男18三科成绩为:909580小兰女16三科成绩为:9585100练习2:写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离distance计算价格Price

(1元/公里):0-100公里票价不打折101-200公里总额打9.5折201-300公里总额打9折300公里以上总额打8折有一个方法,可以显示这张票的信息.90公里90块钱测试上面的类.临时回忆(温故而知新)参数中使用out和ref的区别(传出/传入传出)数组做为参数(讲过了)params,看Console.WriteLine();可变数组我也可以做到命名空间namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。如果代码和被使用的类在一个namespace则不需要using。在不同命名空间下的类调用有两种方法:写全称命名空间.类名先using引用命名空间,再调用字符串的处理(S)string可以看做是char的只读数组。charc=s[1];。例子:遍历输出string中的每个元素。C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。如果要对char进行修改,那么就必须创建一个新的字符串,用s.ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用newstring(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。字符串练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度Length:可以得字符串的长度练习二:两个学员输入各自最喜欢的课程名称,判断是否一致,如果相等,则输出你们俩喜欢相同的课程.如果不相同,则输出你们俩喜欢不相同的课程.上题中两位同学输入c#和C#代表同一门课,怎么办?字符串的连接+,两边只要有一个是字符串类型,另一个也会被自动转换成字符串类型一切类型都可以调用.ToString()方法转换成字符串类型.String类常用方法(S)ToLower():得到字符串的小写形式。注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。s.ToLower()与s=s.ToLower()ToUpper():得到字符串的大写形式;Trim()去掉字符串两端的空白。s1.Equals(s2,parison.OrdinalIgnoreCase),两个字符串进行比较不区分大小写的比较。s1==s2常见疑问谁说字符串不可变?strings="abc";s="123",s这不是变了吗要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。strings10=s1;//s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他内存,那么s10还是指向"hello"abcadmin888888s1s1字符串的分割(S)string[]Split(paramschar[]separator):将字符串按照指定的分割符分割为字符串数组;string[]Split(char[]separator,StringSplitOptionsoptions)将字符串按照指定的char分割符分割为字符串数组(options取RemoveEmptyEntries的时候移除结果中的空白字符串);练习:从日期字符串("2008-08-08")中分析出年、月、日;2008年08月08日。让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日字符串函数详解字符串替换:stringReplace(stringoldValue,stringnewValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。取子字符串:stringSubstring(intstartIndex),取从位置startIndex开始一直到最后的子字符串;stringSubstring(intstartIndex,intlength),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。boolContains(stringvalue)判断字符串中是否含有子串valueboolStartsWith(stringvalue)判断字符串是否以子串value开始;boolEndsWith(stringvalue)判断字符串是否以子串value结束;intIndexOf(stringvalue):取子串value第一次出现的位置。LastIndexofTrim()TrimEnd()TrimStrat()IsNullOrEmpty()string.Join()IntIndexOf(stringvalue,intstartIndex)字符串常用方法:学习查看msdnStringBuilder和String的区别?(*)答:String在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder

则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。字符串的处理练习课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc"→"cba"课上练习2:接收用户输入的一句英文,将其中的单词以反序输出。"hellocsharp"→"sharpchello"课上练习3:从Email中提取出用户名和域名:。课上练习4:文本文件中存储了多个文章标题、作者,标题和作者之间用若干空格(数量不定)隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10,如果超过10,则截取长度8的子串并且最后添加“...”,加一个竖线后输出作者的名字。让用户输入一句话,找出所有e的位置让用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式然后输出,如:老牛很邪恶,输出后变成老牛很**;把{“诸葛亮”,”鸟叔”,”卡卡西”,”卡哇伊”}变成诸葛亮|鸟叔|卡卡西|卡哇伊,然后再把|切割掉总结字符串常用的方法;对象的引用(S)举例:结构版的Person的赋值与类版的Person的赋值int、decimal、bool、doublebyte枚举结构等类型(值类型)是传递拷贝;对象(引用类型)则是传递引用。方法间传递对象String引用类型数组类结构如果写构造函数那么就要把结构中所有的字段全部赋值如果在结构中写了构造函数,那么默认的构造函数还有,和类不同在类中写了有参数的构造函数,无参数的构造函数直接被干掉了并且在类中的构造函数中可以不用把所有字段都赋值

堆和栈的区别(*)栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。值类型和引用类型的区别1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。2.值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。3.值类型不可能包含null值:4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。.net中哪些是值类型?哪些是引用类型?数组:int[],string[]数组接口:interface接口自定义类:class字符串:string基类:System.Object类引用类型结构:struct结构类型枚举:enum枚举类型布尔型:bool字符型:char浮点型:float长整型:long整型:int基本数据类型值类型描述类别为什么要继承分别写一个Teacher类和一个Student的类,分析他们应该有哪些属性和方法.假如系统还要再加入班主任类、校长类(Principal)、家长类......试分析这几个类的属性?代码冗余,怎么解决?冗余的解决方案继承的符号:利用继承实现Student类和Teacher类继承自Person类.Student类和Teacher类继承父类的属性和方法.Student类和Teacher类还有自己独有的属性和方法.继承的使用(S)classStudent:Person{......};classTeacher:Person{......};子类继承了父类的成员,子类还可以有自己的成员.Person叫做父类(基类)Student和Teacher叫子类(派生类)Student继承了Person类Person类派生了Teacher类在c#中,所有的类都直接或间接的继承自了object类.(当我们定义一个类的时候,如果没有写:继承一个类,那么这个类就继承了object类)练习:写一个Reporter类和一个Programmer类,Driver类,他们都有一个打招呼的方法,不同的是Reporter打招呼是

温馨提示

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

评论

0/150

提交评论