收藏 分销(赏)

使用类的索引器与静态成员.pptx

上传人:快乐****生活 文档编号:4332015 上传时间:2024-09-06 格式:PPTX 页数:33 大小:814.91KB
下载 相关 举报
使用类的索引器与静态成员.pptx_第1页
第1页 / 共33页
使用类的索引器与静态成员.pptx_第2页
第2页 / 共33页
使用类的索引器与静态成员.pptx_第3页
第3页 / 共33页
使用类的索引器与静态成员.pptx_第4页
第4页 / 共33页
使用类的索引器与静态成员.pptx_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、1第第9课课 使用类的索引器与静态成员使用类的索引器与静态成员q本课在本课在第第5 5课课 创建并管理类创建并管理类和对象的基础上:和对象的基础上:定义类定义类使用属性使用属性声明方法声明方法使用构造函数使用构造函数继续介绍类与对象的其它知识:继续介绍类与对象的其它知识:索引器索引器类的静态成员类的静态成员q并通过一个实例,来说明类的应用。并通过一个实例,来说明类的应用。29.1 索引器索引器q介绍索引器之前,看下面这个介绍索引器之前,看下面这个CountryCountry类,它用以保类,它用以保存世界上各个国家的人口数量:存世界上各个国家的人口数量:public class Country

2、private string country=中国中国,美国美国,法国法国,日本日本,韩国韩国,印度印度;private double peoples=1.306e+10,2.5e+9,6.09e+8,1.274e+9,4.829e+8,1.027e+10;如何将各个国家的人数以只读方式对外公开,以方如何将各个国家的人数以只读方式对外公开,以方便使用者访问?便使用者访问?示例代码位于示例代码位于“Lesson9Indexer”39.1 索引器索引器使用属性可以吗?使用属性可以吗?public class Country private string country=中国中国,美国美国,法国法国

3、,日本日本,韩国韩国,印度印度;private double peoples=1.306e+10,2.5e+9,6.09e+8,1.274e+9,4.829e+8,1.027e+10;public double Peoples get return this.peoples;示例代码位于示例代码位于“Lesson9Indexer”49.1 索引器索引器q看起来可以:看起来可以:static void Main(string args)Country c=new Country();Console.WriteLine(中国人口数量中国人口数量:0,c.Peoples0);q但如果中间插上这么一句

4、,也能运行:但如果中间插上这么一句,也能运行:static void Main(string args)Country c=new Country();c.CountryPeoples0=1.458e+10;Console.WriteLin(中国的人口数量中国的人口数量:0,c.Peoples0);原因是因为数原因是因为数组是引用类型组是引用类型示例代码位于示例代码位于“Lesson9Indexer”59.1 索引器索引器q当类中包含数组或集合时,如果能够把类看成是一个数组,那当类中包含数组或集合时,如果能够把类看成是一个数组,那么,会简化对这些数组或集合的访问。索引器么,会简化对这些数组或集

5、合的访问。索引器(Indexer)(Indexer)是一是一种属性,它允许以数组的方式来索引对象。种属性,它允许以数组的方式来索引对象。q索引器是一种属性,因此它可以包含索引器是一种属性,因此它可以包含getget访问器和访问器和setset访问器。访问器。q索引器的属性名必须是索引器的属性名必须是thisthis,形式如下:,形式如下:访问属性访问属性 返回值类型返回值类型 this类型类型 索引名,类型索引名,类型 索引名,索引名,get/获取数据获取数据set/设置数据设置数据这儿看起来就像是这儿看起来就像是方法的参数哟方法的参数哟69.1 索引器索引器public class Coun

6、try private string country=中国中国,美国美国,法国法国,日本日本,韩国韩国,印度印度;private double peoples=1.306e+10,2.5e+9,6.09e+8,1.274e+9,4.829e+8,1.027e+10;public double thisint index get return this.peoplesindex;static void Main(string args)Country c=new Country();Console.WriteLine(韩国的人口数量:韩国的人口数量:0,c4);这时如果使用这时如果使用c0=1.

7、458e+10;可是要可是要报错的哟报错的哟示例代码位于示例代码位于“Lesson9Indexer”79.1 索引器索引器q上面的索引器还不够好上面的索引器还不够好q因为我并不知道中国是在第因为我并不知道中国是在第0 0个位置呀,如果能用个位置呀,如果能用cc中国中国来来取中国的人口数量就更好了。取中国的人口数量就更好了。public double thisstring index get int i=0;foreach(string c in country)if(c=index)break;i+;if(i=peoples.Length)return 0;else return people

8、si;static void Main(string args)Country c=new Country();Output(中国的人口数量是中国的人口数量是:+c中国中国);示例代码位于示例代码位于“Lesson9Indexer”89.1 索引器索引器q索引器使用更加灵活:索引器使用更加灵活:索引器同属性一样,可以分别有索引器同属性一样,可以分别有getget访问器和访问器和setset访问器。访问器。可以使用整数作下标,也可以使用字符串等其它类型作下可以使用整数作下标,也可以使用字符串等其它类型作下标。也可以使用多个下标,比如访问二维数组的时候。标。也可以使用多个下标,比如访问二维数组的时

9、候。返回值可以是数组中的值类型,也可以是与数组中值的类返回值可以是数组中的值类型,也可以是与数组中值的类型不同的其它类型。型不同的其它类型。注意:由于注意:由于属性属性或或索引器索引器是特殊的是特殊的方法方法,因此属性或索引器不能作为,因此属性或索引器不能作为方法的方法的ref参数参数或或out参数参数99.2 实例:贷款分析实例:贷款分析q编写一个贷款分析程序,对于给定的贷款数量、年利率和编写一个贷款分析程序,对于给定的贷款数量、年利率和贷款周期,计算月付款额,并显示一个分期偿还的时间表,贷款周期,计算月付款额,并显示一个分期偿还的时间表,即显示在贷款期间内任何一年中任一月末贷款余额的表格。

10、即显示在贷款期间内任何一年中任一月末贷款余额的表格。假设此贷款每月等额偿还。假设此贷款每月等额偿还。q计算月付款的公式为:计算月付款的公式为:q其中:其中:p为贷款金额;为贷款金额;r为月年率为月年率(年利率除以年利率除以12),以以0到到1(100%)给出;给出;n是还完贷款需要的时间是还完贷款需要的时间(以月为单位以月为单位)q计算下一月份的余额的公式为:余额计算下一月份的余额的公式为:余额=(1+r)*b-m其中:其中:b为上月的余额为上月的余额(未偿还贷款的金额未偿还贷款的金额),m是每月的偿是每月的偿还金额。还金额。109.2 实例:贷款分析实例:贷款分析q需求分析:用户有哪些要求?

11、需求分析:用户有哪些要求?签订贷款合同时,我选择好签订贷款合同时,我选择好贷款额贷款额、贷款年限贷款年限和和贷款年利率贷款年利率使用构造函数,使用构造函数,贷款额贷款额、贷款年限贷款年限和和贷款年利率贷款年利率 作为参数作为参数我可以方便地了解以下信息:我可以方便地了解以下信息:贷款额贷款额贷款年数、贷款月数贷款年数、贷款月数贷款年利率、贷款月利率贷款年利率、贷款月利率月付款额月付款额每月余额每月余额可以使用可以使用 方法方法 或或 属性属性 来实现。来实现。119.2 实例:贷款分析实例:贷款分析q设计分析设计分析类名起为类名起为LoanLoan设计构造函数设计构造函数Loan()Loan(

12、)贷款额、贷款年限和贷款年利率贷款额、贷款年限和贷款年利率 作为参数作为参数,据此,也就可以计算出据此,也就可以计算出月付款额月付款额类的字段有哪些?类的字段有哪些?类的字段是为类设计者服务的,认为有以下字段就可以了。类的字段是为类设计者服务的,认为有以下字段就可以了。贷款额贷款额principal,贷款月数贷款月数months,贷款月利率贷款月利率montlyInterestRate月付款额月付款额payment,存放每月余额的数组,存放每月余额的数组balance需要向使用者提供哪些信息?需要向使用者提供哪些信息?贷款额贷款额Principal,贷款年数贷款年数Years、贷款月数、贷款月

13、数Months,贷款年利率贷款年利率AnnualInterestRate、贷款月利率、贷款月利率MonthlyInterestRate,月付款额月付款额Payment,每月余额每月余额(通过通过索引器索引器提供提供)使用使用 方法方法 或或 属性属性 来实现来实现129.2 实例:贷款分析实例:贷款分析qLoanLoan类类139.2 实例:贷款分析实例:贷款分析qLoanLoan类的内部字段类的内部字段示例代码位于示例代码位于“Lesson9Loan”149.2 实例:贷款分析实例:贷款分析qLoan类的构造函数类的构造函数 public Loan(decimal principal,dou

14、ble annualInterestRate,int years)/如果所给初始化的参数不符合要求,抛出异常如果所给初始化的参数不符合要求,抛出异常 if(principal=0.0M)|(annualInterestRate=0.0)|(years 1e-6M)month+;balancemonth=balancemonth-1 *(decimal)(1.0+monthlyInterestRate);balancemonth-=payment;示例代码位于示例代码位于“Lesson9Loan”189.2 实例:贷款分析实例:贷款分析Loan类类如果要想使使用者访问帐户余额方便,可以定义一个索

15、引器如果要想使使用者访问帐户余额方便,可以定义一个索引器索引器:求某个月的贷款余额索引器:求某个月的贷款余额示例代码位于示例代码位于“Lesson9Loan”19 private void btnRun_Click(object sender,RoutedEventArgs e)Loan l=new Loan(10000M,0.0655,10);/构造用以输出结果的字符串构造用以输出结果的字符串 string sOutput=String.Empty;sOutput+=String.Format(本金:本金:0:Crn,l.Principal);sOutput+=String.Format(还

16、款月数:还款月数:0rn,l.Months);sOutput+=String.Format(月利率:月利率:0:P4rn,l.MonthlyInterestRate);sOutput+=String.Format(月还款额:月还款额:0:Crn,l.Payment);for(int month=0;month=l.Months;month+)sOutput+=String.Format(第第0月月:1,-10:Crn,month,lmonth);tbOutput.Text=sOutput;9.2 实例:贷款分析实例:贷款分析q使用使用LoanLoan类,一个简单的测试类,一个简单的测试示例代码

17、位于示例代码位于“Lesson9Loan”20思考题:思考题:q应用应用LoanLoan类来实现贷款计算器,要求实现类似于下面类来实现贷款计算器,要求实现类似于下面的界面。的界面。21Extended WPF Toolkit控件使用控件使用q从从CodePlex下载下载Extended WPF Toolkit控件库控件库http:/ 使用类的静态成员使用类的静态成员q本节介绍类的静态成员。静态成员属于类,而不属于本节介绍类的静态成员。静态成员属于类,而不属于实例。通过使用静态构造函数可以初始化类。实例。通过使用静态构造函数可以初始化类。q学习完本节后,你将能够:学习完本节后,你将能够:使用类的

18、静态成员使用类的静态成员使用静态构造函数初始化类使用静态构造函数初始化类239.3.1 如何使用类的静态成员如何使用类的静态成员q静态成员静态成员属于类属于类在类的实例创建以前完成初始化在类的实例创建以前完成初始化被同一个类的所有实例共享被同一个类的所有实例共享public class Student public static string TypeName=学生学生;.Console.WriteLine(人员类型人员类型:0,Student.TypeName);注意:是使用注意:是使用类名来引用的类名来引用的示例代码位于示例代码位于“Lesson9StaticStudent”249.3.1

19、 如何使用类的静态成员如何使用类的静态成员q静态方法静态方法方法也可以是静态的方法也可以是静态的,当对方法使用静态修饰符时,方法只,当对方法使用静态修饰符时,方法只能通过类而不能通过对象来访问。能通过类而不能通过对象来访问。由于静态方法是类的一部分,所以调用它们时无需创建类的由于静态方法是类的一部分,所以调用它们时无需创建类的实例。在实例。在C#C#中,不能中,不能通过类的实例来访问静态方法通过类的实例来访问静态方法。使用静态修饰声明的方法是全局方法使用静态修饰声明的方法是全局方法。当静态声明某个方法。当静态声明某个方法时,无论这个方法所属的类被实例化多少次,静态方法只有时,无论这个方法所属的

20、类被实例化多少次,静态方法只有一个。一个。当成员引用或操作的信息是关于类而不是类的实例时,这个当成员引用或操作的信息是关于类而不是类的实例时,这个成员就应该设置为静态成员。成员就应该设置为静态成员。例如,可以使用一个静态方法例如,可以使用一个静态方法来统计类对象的数量,或者使用静态方法来维护有关类的对来统计类对象的数量,或者使用静态方法来维护有关类的对象的日志信息。象的日志信息。具体示例见下页。具体示例见下页。259.3.1 如何使用类的静态成员如何使用类的静态成员public class Student private static int count=0;/统计学生人数统计学生人数 /为简

21、单起见,以下字段没有使用属性封装为简单起见,以下字段没有使用属性封装 public string ID;/学号学号 public string Name;/姓名姓名 public int Age;/年龄年龄 public Student(string id,string name,int age)count+;/每创建一个学生对象,计数器加每创建一个学生对象,计数器加1 this.ID=id;this.Name=name;this.Age=age;public static int Count get return count;静态的字段静态的字段静态的方法静态的方法(属性属性)注意:不能使注

22、意:不能使用用thisthis引用引用示例代码位于示例代码位于“Lesson9StaticStudent”26示例代码位于示例代码位于“Lesson9StaticStudent”9.3.1 如何使用类的静态成员如何使用类的静态成员 Student s1=new Student(2005001,张三张三,21);Console.WriteLine(s1);Student s2=new Student(2005002,李四李四,20);Console.WriteLine(s2);Student s3=new Student(2005003,王五王五,19);Console.WriteLine(s3

23、);Console.WriteLine(学生对象总数是:学生对象总数是:0,Student.Count);279.3.2 如何初始化类如何初始化类q静态构造函数静态构造函数 只会执行一次只会执行一次在第一个对象创建以前运行在第一个对象创建以前运行没有参数没有参数没有访问修饰符没有访问修饰符可与类的构造函数一起存在可与类的构造函数一起存在用来初始化类用来初始化类289.3.2 如何初始化类如何初始化类public class Student public static string TypeName;/学生的人员类型学生的人员类型 private static int count=0;/统计学生

24、人数统计学生人数 static Student()TypeName=学生学生;count=0;注意:静态构造函数没有用注意:静态构造函数没有用publicpublic修饰,也没有参数修饰,也没有参数29.NET框架类库中的静态成员框架类库中的静态成员q.NET.NET框架类库中许多类使用了静态成员框架类库中许多类使用了静态成员(包括静态字包括静态字段和属性等段和属性等)ConsoleConsole类的类的WriteLineWriteLine方法方法(也有许多静态属性,试试看也有许多静态属性,试试看)MessageBoxMessageBox类的类的ShowShow方法方法MathMath类的许多

25、数学运算函数,还有类的许多数学运算函数,还有Math.PIMath.PI和和Math.EMath.EConvertConvert类的若干转换函数类的若干转换函数使用使用“对象浏览器对象浏览器”,看看这些方法和属性的说明,看看这些方法和属性的说明309.3.3 课堂练习课堂练习 使用类的静态成员使用类的静态成员q在本练习中,通过为在本练习中,通过为AntelopeAntelope类添加一个类添加一个静态成员,并且在类的构造函数中递增该静态成员,并且在类的构造函数中递增该静态成员来统计静态成员来统计AntelopeAntelope对象的数量。对象的数量。1.1.打开打开Visual Studio

26、Visual Studio.NET.NET,然后打开实验文件夹下的,然后打开实验文件夹下的Lesson9StatLesson9StaticStatic.slnicStatic.sln。2.2.复查任务列表复查任务列表3.3.为为AntelopeAntelope类增加一个公有静态类增加一个公有静态intint型变量型变量numnummberOfAntelopesmberOfAntelopes。1.在在“任务列表任务列表”窗口中,双击窗口中,双击TODO1:增加一个称为增加一个称为nummberOfAntelope的公有静态的公有静态变量变量2.在类中添加以下代码:在类中添加以下代码:public

27、 static int numberOfAntelopes;319.3.3 课堂练习课堂练习 使用类的静态成员使用类的静态成员q在本练习中,通过为在本练习中,通过为AntelopeAntelope类添加一个静态成员,并且在类的类添加一个静态成员,并且在类的构造函数中递增该静态成员来统计构造函数中递增该静态成员来统计AntelopeAntelope对象的数量对象的数量(续续)。4.4.在在AntelopeAntelope构造函数中增加成员变量构造函数中增加成员变量numberOfAntelopesnumberOfAntelopes的值。的值。1.找到任务找到任务TODO2:将将numberOfA

28、ntelopes成员变量值加成员变量值加12.通过在构造函数中增加以下代码,使得在每次创建对象时,通过在构造函数中增加以下代码,使得在每次创建对象时,变量变量memberOfAntelopes加加1:numberOfAntelopes+;5.5.显示显示antelopeantelope类被实例化的次数:类被实例化的次数:1.找到任务找到任务TODO3:显示创建的显示创建的antelope对象的数量对象的数量2.在在Ouput方法中,把参数方法中,把参数null替换成对静态变量替换成对静态变量numberOfAntelopes的引用,如:的引用,如:Output(羚羊的数量羚羊的数量:+Ante

29、lope.numberOfAntelopes);6.6.测试代码测试代码(注意使用逐步运行注意使用逐步运行)7.7.保存程序,然后退出保存程序,然后退出Visual Studio.NETVisual Studio.NET。329.4 回顾回顾类和对象的基本概念,类的定义和类对象的实例化;类和对象的基本概念,类的定义和类对象的实例化;类成员的访问属性:类成员的访问属性:publicpublic和和privateprivate;类属性的作用和实现;类属性的作用和实现;方法的重载;方法的重载;构造函数的作用和重载;构造函数的作用和重载;析构函数;析构函数;索引器的作用和实现索引器的作用和实现类的静态成员类的静态成员掌握使用类来构造应用程序掌握使用类来构造应用程序339.5 上机实验上机实验q完成实验完成实验9 9实验报告实验报告程序程序1 1:完成:完成“索引器索引器”的课堂示例的课堂示例(Lesson9CountryLesson9Country);程程 序序 2 2:“使使 用用 类类 的的 静静 态态 成成 员员”的的 课课 堂堂 练练 习习(Lesson9StaticLesson9Static);程序程序3 3:使用贷款类完成贷款计算器:使用贷款类完成贷款计算器(Lesson9LoanLesson9Loan);

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服