面向对象的编程基础.ppt

上传人:新** 文档编号:568616460 上传时间:2024-07-25 格式:PPT 页数:31 大小:292.51KB
返回 下载 相关 举报
面向对象的编程基础.ppt_第1页
第1页 / 共31页
面向对象的编程基础.ppt_第2页
第2页 / 共31页
面向对象的编程基础.ppt_第3页
第3页 / 共31页
面向对象的编程基础.ppt_第4页
第4页 / 共31页
面向对象的编程基础.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《面向对象的编程基础.ppt》由会员分享,可在线阅读,更多相关《面向对象的编程基础.ppt(31页珍藏版)》请在金锄头文库上搜索。

1、3.1.4 属性 一个设计良好的类不仅仅要将类的实现部分隐藏起来,还会限制外部对类中成员变量的存取限制。在C#语言中,可以通过属性来实现。属性是类的一种成员,是用来封装类数据的一种方式,如字体、颜色等属性。使用属性的另一个好处是可以使应用程序看起来更直观。1、属性的使用 用属性声明的方式来对属性进行定义,通过访问器get和访问器set提供外部对私有成员的访问。根据使用情况不同,可以只用get或者只用set,也可以同时使用get和set。get:用来读取数据成员的值。set:用来设置数据成员的值。 例例3-103-10声明属性。声明属性。 using System;using System;na

2、mespace namespace PropertyExamplePropertyExample public class public class MyClassMyClass private private intint number=0; number=0; public public intint MyNumberMyNumber get get return number; return number; set set if(valueif(value0)0) number=value; / number=value; /valuevalue是关键字,其值由编译器自动生成是关键字,其

3、值由编译器自动生成 输出结果:05 C#还提供自动实现的属性定义!- 不用声明对应私有字段 如 Public int MyNumberget;set; Public int MyNumberget;private set; /read-only public class Programpublic class Program public static void Main() public static void Main() MyClassMyClass me=new me=new MyClassMyClass();(); Console.WriteLine(me.MyNumberConso

4、le.WriteLine(me.MyNumber);); me.MyNumberme.MyNumber=5;=5; Console.WriteLine(me.MyNumberConsole.WriteLine(me.MyNumber);); Console.ReadLineConsole.ReadLine();(); 在可视化设计中,属性通常显示在设计工具的属性窗口中。2、属性与方法的区别(1)属性不必使用括号,但方法一定要使用括号。(2)属性不能指定参数,方法可以指定参数。(3)属性不能使用void类型,方法则可以使用void类型。3.1.5 事件 “事件”是指当对象发生某些事情时,向其他对

5、象提供消息的一种方法。事件一般有两个角色: 事件发送方 触发事件的对象 事件接收方 事件发生时被通知的对象。 事件发送方对象会自行维护本身的状态信息。当本身的状态信息变动时,便触发一个事件,并通知所有的事件接收方。事件接收方可以注册感兴趣的事件,一般提供一个事件处理程序,以便在事件发送方触发一个事件后,会自动执行这段程序代码的内容。 事件最常见的用途是用于图形用户界面。一般情况下,每个控件都有一些事件,当用户对控件对象进行某些操作(如单击某个按钮)时,都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。 Windows的消

6、息系统 消息队列:Windows能够为每个应用程序维护一个消息队列。应用程序必须从消息队列中获取消息,然后分派给某个窗口。 消息循环:通过这个循环机制,应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。 窗口过程:每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后响应它。 一个消息从产生到被一个窗口响应,其中有五个步骤: 1) 系统中发生了某个事件。 2) Windows把这个事件翻译为消息,然后把它放到应用程序的消息队列中。 3) 应用程序从消息队列中接收到这个消息,把它存放在记录中。 4) 应用程序

7、把消息传递给一个适当的窗口的窗口过程。 5) 窗口过程响应这个消息并进行处理。 步骤3和4构成了应用程序的消息循环。消息循环往往是Windows应用程序的核心,因为消息循环使一个应用程序能够响应外部的事件。消息循环的任务就是从消息队列中检索消息,然后把消息传递给适当的窗口。如果消息队列中没有消息,Windows就允许其他应用程序处理它们的消息。Windows应用程序最大的特点就是其图形化的操作界面,其图形化界面是建立在事件驱动和消息响应处理机制事件驱动和消息响应处理机制这个基础之上的。3.1.6 索引器u索引器用于封装内部集合或数组。u索引器在语法上方便了程序员将类、结构或接口作为数组进行访问

8、。u要声明类或结构上的索引器,需要使用this关键字。例如:public int thisint index / 索引器声明 / get and set accessors【例3-11】索引器的声明和用法。using System;namespace IndexExample class DayCollection string days = Sun, Mon, Tues, Wed, Thurs, Fri, Sat ; public int thisstring day get return (GetDay(day); public string thisint i get return (d

9、aysi); private int GetDay(string testDay) int i = 0; foreach (string day in days) if (day = testDay) return i; i+; return -1; class Program static void Main(string args) DayCollection week = new DayCollection(); Console.WriteLine(week1); Console.WriteLine(weekFri); Console.WriteLine(weekOther Day);

10、Console.ReadLine(); 输出结果:Mon5-13.2 常用类操作和数据处理 Visual Studio 2005开发环境提供了实现各种功能的丰富的类,其中有些类是实际编程中经常用到的,这一节只选取了其中的几种,并通过一些具体例子简单说明了使用的方法。 3.2.1 Convert类 Convert类位于System命名空间下,用于将一个值类型转换为另一个值类型。例3-12 Convert类的使用举例。using System;using System;namespace namespace ConvertExampleConvertExample class Program cl

11、ass Program public static void Main() public static void Main() double d1=23.5D,d2=23.4D; double d1=23.5D,d2=23.4D; intint i1=Convert.ToInt32(d1); i1=Convert.ToInt32(d1); intint i2=Convert.ToInt32(d2); i2=Convert.ToInt32(d2); Console.WriteLine(0,1,i1,i2); Console.WriteLine(0,1,i1,i2); intint i=0; i=

12、0; boolbool b1=Convert.ToBoolean(d1); b1=Convert.ToBoolean(d1); boolbool b2= b2=Convert.ToBoolean(iConvert.ToBoolean(i);); Console.WriteLine(0,1,b1,b2); Console.WriteLine(0,1,b1,b2); string s=123; string s=123; i=Convert.ToInt32(s i=Convert.ToInt32(s); Console.WriteLine(0,1,s,i); Console.WriteLine(0

13、,1,s,i); Console.ReadLineConsole.ReadLine();(); 输出结果:输出结果:24,2324,23true,falsetrue,false123,123123,1233.2.2 String 几乎任何一个项目都离不开对字符串的处理,在C和C+编程中,许多程序的漏洞都是由于字符缓冲区溢出而造成的。为了避免在C#程序中出现类似的问题,同时也为了使用更方便,C#语言中专门设置了两个字符串处理类:String类和StringBuilder类。 声明String类时可以用String也可以用string。例如: string myString=”some text”

14、; 也可以写为 String myString=”some text”; String类表示的是一系列不可变的字符。说其实例是“不可变的”,是因为无法直接修改给该字符串分配的堆中的字符串。例如,在myString的后面接上另一个字符串: myString+=”and a bit more”; 其实际操作并不是在原来myString所占内存空间的后面直接附加上第二个字符串,而是返回一个新String实例。显然,如果这种操作非常多,对内存的消耗是非常大的。string a = 1111; /a是一个引用,指向string类的一个实例string b = a; /b与a都是同一个对象Console.

15、WriteLine(a=0,b=1,a,b);/a=b=“1111”/b重新赋值后与a指向的并不是同一样对象,因为给b赋值后,已经创建了一个新的对象,并将这个新的string对象的引用赋给了b。b = 2222; Console.WriteLine(a=0,b=1,a,b);/a=“1111” b=“2222”string作为参数传递时,却有值类型的特点,当传一个string类型的变量进入方法内部进行处理后,当离开方法后此变量的值并不会改变。原因是每次修改string的值时,都会创建一个新的对象。 a的引用值仍为“1111” 解决这个问题的办法是使用System.Text.StringBuil

16、der类。本节我们只介绍String类,下一节再介绍StringBuilder类的用法。 在C#语言中,语句: string str=”C:testfirst.cs”; 也可以表示为 string str=”C:testfirst.cs”; 字符串前面表示字符串内容原样输出,不使用转义。比较两种表示形式可以看出,显然前面加上符号的表示形式要比使用转义符的表示形式更直观。 如果要得到string中的某个字符,可以使用类似下面的办法: string myString=”some text”; char chFirst=myString2; /结果为m 需要注意的是,string是Unicode字符

17、串,即每个英文字母占两个字节,每个汉字也是两个字节。在计算字符串长度时,每个英文字母的长度为1,每个汉字的长度也是1。例如: string str=”ab张三cde”; Console.WriteLine(str.Length); /输出结果:71、字符串的表示格式 可以使用Format方法将字符串表示为规定格式。规定格式的一般形式为N,M:格式码其中, : 表示其中的内容为可选项。 N: 从零开始的整数,表示第几个参数。 M: 可选整数,表示最小长度。若参数N的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,则默认为零。 格式码:可选的格式化代码字符串。表

18、3-1列出了部分格式示例。 格式符含义示例:(int i=10;double x=10.5;)结果C将数字按照金额形式输出Console.WriteLine(“0:C”,i);¥10.00Console.WriteLine(“0:C”,x);¥10.50D输出整数Console.WriteLine(“0:D”,i);10Console.WriteLine(“0:D5”,i); 00010F小数点后位数固定Console.WriteLine(“0:F”,i);10.00Console.WriteLine(“0:F4”,x); 10.5000表表3-1 3-1 部分格式码部分格式码 使用格式时必须

19、用“”和“”将格式与其他字符分开。 注意格式化表示形式中有两个特殊的用法:如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号;如果希望格式中的字符或字符串包含于格式符相同的字符但是又希望让其原样显示时,可以用单引号将其引起来。 有时可能需要输出一些特殊格式的数字,例如在某些位置使用指定的占位符等,这时需要使用特殊的表示方法,常用的占位符如下。(1)0占位符。如果数字位数不够指定占位符位数,则左边补0至占位符位数。 例如,数字123按照“00000”的格式输出结果为00123;如果数字位数超过指定的占位符位数,则原样输出。例如,12345按照“000”格式输出结果为12345;

20、如果小数部分的位数超出指定的占位符位数,则多余的部分四舍五入。例如,123.64按照“0000”的格式输出结果为0124,按照“0000.0”的格式输出结果为0123.6,按照“0000.00”的格式输出结果为0123.64。可见,0占位符一般用于输出固定位数的数字。 (2)#占位符。对整数部分,去掉数字左边的无效0;对小数部分,按照四舍五入原则处理后,再去掉右边无效0。 例如,数字0123按照“#”的格式输出结果为123,按照“#”的格式输出结果为仍未123;123.64按照“#”的格式输出结果为124,按照“#.#”的格式输出结果为123.6,按照“#.#”的格式输出结果为123.64;1

21、23.04按照“#.#”的格式输出结果为123。注意:如果这个数就是0,而又不想让它显示的时候,#占位符很有用。例如,0按照“#”的格式什么都不会输出。下面举例说明格式化字符串的用法。(1)在ToString中使用d格式int i=12345;/i.ToString(d)表示将i按照实际整数宽度转换为字符串string str=i.ToString(d);Console.WriteLine(str); /结果12345/i.ToString(d8)表示将i转换为字符串,宽度为8位,不够8位左边用0填充string str1=i.ToString(d8);Console.WriteLine(st

22、r1); /结果00012345(2)在string.Format中使用d格式int i=123;double j=123.45;/0,7:d表示第0个参数,宽度7位,不够7位左边用空格填充,d表示十进制整数string s1=string.Format(the value is 0,7:d,i);Console.WriteLine(s1); /结果 the value is 123/0,7:f3表示第0个参数,宽度7位,其中小数部分3位,不够7位左边用空格填充/f表示浮点数 string s2=string.Format(the value is 0,7:f3,j);Console.Writ

23、eLine(s2); /结果 the value is 123.450(3)在ToString中使用f格式 double i=12345.6789; /f2表示浮点数小数部分为2位,多余部分四舍五入,不够2位时右边补零 string str=i.ToString(f2); Console.WriteLine(str); /结果 12345.68 string str1=i.ToString(f6); Console.WriteLine(str1); /结果 12345.678900(4)在ToString中使用n格式double i=12345.6789;/n表示整数部分从小数点向左每3位用逗

24、号分隔开,小数部分2位,多余部分四舍五入string str=i.ToString(n);Console.WriteLine(str); /结果 12,345.68/n4表示整数部分从小数点向左每3位用逗号分隔开,小数部分4位,多余部分四舍五入string str1=i.ToString(n4);Console.WriteLine(str1); /结果 12,345.6789 (5)在ToString中使用p格式double i=0.126;/p表示百分数形式string s=string.Format(the value is 0:p,i);Console.WriteLine(s); /结果

25、 the value is 12.60%string str=i.ToString(p);Console.WriteLine(str); /结果 12.60%(6)日期与时间的格式化表示DateTime dt=new DateTime(2006,5,25);/yy表示年占两位,M表示月占1位,超出1位按实际位数/d表示日占1位,超出1位按实际位数string str=dt.ToString(yy.M.d);Console.WriteLine(str); /结果 06.5.25/yyyy表示年占四位,M表示月占1位,超出1位按实际位数,其他按原字符输出string str1=dt.ToStrin

26、g(yyyy年M月d日);Console.WriteLine(str1); /结果 2006年5月25日(7)指定位数和对齐方式int i=123;double j=123.45;/0,-7表示第0个参数左对齐,占7位,不够7位右边补空格。/1,7表示第1个参数右对齐,占7位,不够7位左边补空格。string s=string.Format(i:0,-7,j:1,7,i,j);Console.WriteLine(s); /结果i:123 ,j: 123.45(8)使用#占位符表示int i=00012;string str=string.Format(0:#,#.00,i);Console.W

27、riteLine(str); /结果 12.00i=0;str=string.Format(0:#,i);Console.WriteLine(str); /结果什么都不输出2、常用字符串操作方法 由于绝大部分编程都离不开字符串操作,所以最好能熟练掌握在C#语言中如何使用字符串。下面举例说明常用的一些方法。(1)生成字符串 string str1=this is a string.; string str2=str1; string str3=new string(a,4); Console.WriteLine(str3); /结果为aaaa (2)比较两个字符串 可以用string.Compa

28、re(string strA,string strB)比较两个字符串的大小,它返回3种可能的结果:如果strA大于strB,结果为1;如果strA等于strB,结果为0;如果strA小于strB,结果为-1; 而string.Compare(string strA,string strB,bool ignoreCase)在比较两个字符串大小时还可以决定是否区分大小写。例如,对前面生成的字符串: Console.WriteLine(string.Compare(str1,str2); /结果为0 Console.WriteLine(string.Compare(str1,str3); /结果为1

29、 Console.WriteLine(string.Compare(str3,str1); /结果为-1 也可以使用Equals(string a,string b)比较两个字符串是否相等,或者直接使用“=”比较两个字符串是否相等。例如: Console.WriteLine(string.Equals(str1,str2); /结果为True Console.WriteLine(str1=str2); /结果为True (3)查找指定字符串在字符串中出现的位置 利用IndexOf(string str)可以求str在字符串中首次出现的位置。 利用Last IndexOf(string str)

30、可以求str在字符串中最后一次出现的位置。 例如,对前面生成的字符串: Console.WriteLine(str1.IndexOf(“is”); / str1=this is a string. /结果为2(注意序号从0开始) Console.WriteLine(str1.LastIndexOf(is); /结果为5(4)在一个字符串的指定位置插入指定的字符串 利用Insert(int startIndex,string str)可以在startIndex处插入字符串str。例如,对前面生成的字符串: Console.WriteLine(str1.Insert(2,abc); /结果为 th

31、abcis is a string. (5)从字符串中删除指定数量的字符 利用Remove(int startIndex,int count) 可以删除从startIndex开始的count个字符。例如,对前面生成的字符串: Console.WriteLine(str1.Remove(1,2); /结果为 ts is a string.(6)字符串替换 利用Replace(string OldStr,string newStr)可以将字符串中所有的oldStr替换为newStr。例如,对前面生成的字符串: Console.WriteLine(str1.Replace(is,xy); /结果为

32、thxy xy a string.(7)分离字符串 利用Split(char separator)可以将字符串按照指定的字符进行分离。 例如, 对前面生成的字符串: string str=str1.Split( ); for(int i=0;istr.Length;i+) Console.WriteLine(stri); 输出结果:thisisastring. (8)把字符串中的字符复制到一个字符数组中 利用ToCharArray可以将字符串转换为字符数组。 例如,对前面生成的字符串。 char charArray=new char20; charArray=str1.ToCharArray(); for(int i=0;istr1.Length;i+) Console.WriteLine(charArrayi); 输出结果:输出结果:t th hi is si is sa as st tr ri in ng g. . 小 结 介绍了面向对象中属性、事件和索引器,常用类的操作与举例。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号