您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第二章 面向对象程序设计思想(上)
计算机语言C#第二章面向对象程序设计思想(上)上一讲作业答案•1、可以用C#编写哪些类型的应用程序?•【解答】•1)控制台应用程序。•2)Windows应用程序。•3)ASP.NETWeb应用程序。•4)ASP.NETWeb服务应用程序。•5)智能设备应用程序。•2、什么是命名空间?命名空间和类库的关系是什么?•【解答】•1)命名空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的命名空间下。•2)命名空间又可以包含其它的命名空间,例如System.Windows.Forms,是指System命名空间下有Windows命名空间,Windows命名空间下有Forms命名空间。•3)所有类库都在规定的命名空间下。学习目标•1、理解对象和类的概念•2、初步理解引用•3、掌握C#中如何表示“值”•4、初步掌握不同类型的值如何转换引子1•(1)所有东西都是对象–可将对象想象成一种新的类型;–同一类的对象具有相同的属性名称和方法;•(2)程序是一大堆对象的组合–为了告诉对象做什么,需向那个对象“发送一条消息”。具体地讲,可将消息想象为一个调用,它调用的是从属于目标对象的一个子例程或函数。•(3)每个对象都有自己的存储空间,并且可以包含其他对象•(4)程序通过句柄(引用)访问对象–句柄中包含对象在内存中的存储地址引子2•《墨子小取》“白马,马也;乘白马,乘马也;骊马,马也,乘骊马,乘马也。”–墨子在这里说的是,不论黑马白马,均是马的一种,既然马可以骑,那么白马和黑马都可以骑。–因此:•一个类可以是另一个类的子类;•父类所具有的属性和方法,子类也都有;•可以用父类的名称来表示子类对象,但不能有子类的名称来表示父类对象。一、对象和类•1.1类•人们对事物的抽象描述,概括出该事物所具有的属性和方法,并将其进行封装,以供使用。•用class定义类,声明类的形式为:–[附加声明][访问修饰符]class类名称[:[基类][,接口序列]]–{–[属性]–[方法]–}例1•某公司员工类型有“计时工”、“计件工”和“合同工”三类,计时工的工资结算方式为工作时间乘以小时工资,请编写程序计算计时工的工资。+设置单位工资(inwagePerHour:double)+设置工作时间(inhour:double)+计算工资():double+设置姓名():string+设置年龄():int+获得姓名()+获得年龄(inage:int)-姓名:string-年龄:int-单位工资:double-工作时间:double计时工+setWagePerHour(inwagePerHour:double)+setHour(inhour:double)+earnings():double+getName():string+getAge():int+setName()+setAge(inage:int)-name:string-age:int-wagePerHour:double-workHours:doublehourlyWorker•publicclassHourlyWorker•{•stringname;•intage;•doublewagePerHour;•doubleworkHours;•publicvoidsetWagePerHour(doublewagePerHour)•{•this.wagePerHour=wagePerHour;•}•publicvoidsetWorkHours(doubleworkHours)•{•this.workHours=workHours;•}•publicdoubleearnings()•{•returnthis.wagePerHour*this.workHours;•}•publicstringgetName()•{•returnthis.name;•}•publicintgetAge()•{•returnthis.age;•}•publicvoidsetName(stringname)•{•this.name=name;•}•publicvoidsetAge(intage)•{•this.age=age;•}•}1.2对象•对象(实例):类的实例化。客观的。•对象在建立时分配了内存,创建对象实际上作了两个方面的工作:–(1)使用new关键字分配内存;–(2)使用构造函数初始化数据(构造函数是与类名同名的函数)。•例:–HourlyWorkerhw;//声明HourlyWorker类型的引用hw–hw=newHourlyWorker();//创建HourlyWorker对象,并由hw指向该对象1.3使用对象•1、不直接使用对象,而是使用“引用”–“引用”指该类型的变量并不直接存储所包含的实际数据,而是存储实际数据的地址。–C#中的引用类型有四种:•类、委托、接口和数组。•2、引用间赋值时传递的是存放对象的地址•3、当一个对象不被任何句柄引用时,视作“垃圾”。由.Net的垃圾回收机制自动销毁不再使用的对象。–垃圾回收机制是在它认为适当的时候自动回收不再使用的内存的。测试•classProgram•{•staticvoidMain(string[]args)•{•HourlyWorkerhw=newHourlyWorker();•hw.setName(Tom);•hw.setAge(33);•hw.setWagePerHour(8);•hw.setWorkHours(32);•Console.WriteLine({0}({1}):{2},hw.getName(),hw.getAge(),hw.earnings());•Console.ReadLine();•}•}•输出:Tom(33):256二、C#中如何表示“值”•分为两类:值类型和引用类型。–值类型:•包括基本类型、枚举类型、结构类型。–引用类型:•包括类、接口、数组、委托。2.1基本类型P192.2整型•C#提供了九种整型:–sbyte:1字节有符号–byte:1字节无符号–short:2字节有符号–ushort:2字节无符号–int:4字节有符号,最常用–uint:4字节无符号–long:8字节有符号–ulong:8字节无符号–char:2字节,单个Unicode字符编码,例如:'1'2.3浮点类型•float:4字节浮点数,常用。例如:35.0f•double:8字节浮点数,常用。例如:2.7E+23•注意:对于直接数,如3.5,C#将其视作double类型。2.4小数型•即decimal类型,共128个二进制位,具有28至29位十进制有效数字。适用于金融、货币等需要高精度数值的领域。2.5布尔型•用bool表示,bool类型只有两个值true和false。•例如:–boolisExist=false;–boolb=(i0&&i10);2.6字符型•char型,为单个Unicode字符,字符型常量必须用单引号引起来。•如果是字符串是单个字符的组合,对应的类型为string。string类型的常量用双引号将字符串引起来。•char和string类型均可以使用转义符。2.7结构型•结构是复合值类型•对性能特别关注的情况下,可以考虑使用结构。•凡是使用结构实现的功能,均可以用类实现。•声明struct类型的语法形式为:–[附加声明][访问修饰符]struct结构名称[:实现的接口]结构体[;]三、类型转换•3.1、隐式转换–从低精度、小范围的数据类型转换为高精度、大范围的数据类型,可以用隐式转换。–例如:•intk=1;•longi=2;•i=k;//隐式转换•3.2、显式转换–将大范围类型的数据转换为小范围类型的数据的时候,必须特别谨慎,因为此时有丢失数据的危险。•(1)大类型-小类型•(2)无符号-有符号•(3)浮点型中只能将float转换为double,其余都不行•例如:–floatk=3.5;3.3使用Convert类转换•Convert类位于System命名空间下,用于将一个值类型转换为另一个值类型。•usingSystem;•usingSystem.Collections.Generic;•usingSystem.Text;•namespaceConvertClassExample•{•classProgram•{•publicstaticvoidMain()•{•doubled1=23.5D,d2=23.4D;•inti1=Convert.ToInt32(d1);•inti2=Convert.ToInt32(d2);•Console.WriteLine({0},{1},i1,i2);•inti=0;•boolb1=Convert.ToBoolean(d1);•boolb2=Convert.ToBoolean(i);•Console.WriteLine({0},{1},b1,b2);•strings=123;•i=Convert.ToInt32(s);•Console.WriteLine({0},{1},s,i);•Console.ReadLine();•}•}•}输出结果:24,23True,False123,123四、课堂练习•1、参照例1中的“计时工”类设计“计件工”类和“合同工”类。“计件工”的工资核算公式为:工资=加工件数*每件加工费;“合同工”工资核算公式为:工资=每月底薪+加工件数*每件加工费。•2、使用下面数据创建对象,并输出类名姓名年龄工作时间每小时工资加工件数每件加工费每月底薪计时工Tom32408计件工Mike448003合同工Lee3580021000五、课后作业•1、C#语言中,值类型和引用类型有何不同?•2、C#中不同整型之间进行转换的原则是什么?•3、分析下面程序是否正确,若有错误,请指出原因:•usingSystem;•usingSystem.Collections.Generic;•usingSystem.Text;•namespaceConsoleApplication3•{•classProgram•{•staticvoidMain(string[]args)•{•floatf1=9.0f;•floatf2=f1*3.0;•Console.WriteLine(f2);•}•}•}
本文标题:第二章 面向对象程序设计思想(上)
链接地址:https://www.777doc.com/doc-3088800 .html