《C#程序设计及基于工作过程的项目开发》课件第2章.ppt

上传人(卖家):momomo 文档编号:8088814 上传时间:2024-11-24 格式:PPT 页数:85 大小:864.50KB
下载 相关 举报
《C#程序设计及基于工作过程的项目开发》课件第2章.ppt_第1页
第1页 / 共85页
《C#程序设计及基于工作过程的项目开发》课件第2章.ppt_第2页
第2页 / 共85页
《C#程序设计及基于工作过程的项目开发》课件第2章.ppt_第3页
第3页 / 共85页
《C#程序设计及基于工作过程的项目开发》课件第2章.ppt_第4页
第4页 / 共85页
《C#程序设计及基于工作过程的项目开发》课件第2章.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

1、学习情境二 面向对象编程2.1 任务一:学会使用已有资源任务一:学会使用已有资源 2.2 任务二:学生类的初步设计任务二:学生类的初步设计 2.3 任务三:学生类的进阶设计任务三:学生类的进阶设计 2.4 举一反三举一反三 2.1 任务一:学会使用已有资源任务一:学会使用已有资源2.1.1 功能描述功能描述本任务通过一个控制台应用程序,演示了C#.NET框架类中的几个常用的类,包括System.String、System.StringBuilder、System.Math和System.Random类。2.1.2 代码展示代码展示1 using System;2 using System.Te

2、xt;3 namespace useClassPro4 5 class Program6 7 static void Main(string args)8 9 StringBuilder former=new StringBuilder(原始字符串为:);10 StringBuilder total;11 string mutation1,mutation2,mutation3;12 int a,b,c;13 double discriminant,root1,root2,test;14 Console.WriteLine(原始字符串为:+former+);15 Console.WriteLi

3、ne(字符串长度为:+former.Length);16 total=former.Append(ax2+bx+c);17 mutation1=total.ToString().ToUpper();18 mutation2=mutation1.Replace(X,y);19 mutation3=mutation2.Substring(21,9);20 Console.WriteLine(连接后的字符串为:+total);21 Console.WriteLine(mutation1-调用大写函数后:+mutation1);22 Console.WriteLine(mutation2-调用替代函数

4、将X替代为y后:+mutation2);23 Console.WriteLine(mutation3-mutation2的子串:+mutation3);24 Console.WriteLine();25 Console.WriteLine(请输入x2的参数A:);26 a=int.Parse(Console.ReadLine();27 Console.Write(请输入x的参数B:);28 b=int.Parse(Console.ReadLine();29 Console.WriteLine(请输入方程的常数C:);30 c=int.Parse(Console.ReadLine();31 di

5、scriminant=Math.Pow(b,2)-(4*a*c);32 root1=(-1*b)+Math.Sqrt(discriminant)/(2*a);33 root2=(-1*b)-Math.Sqrt(discriminant)/(2*a);34 Console.WriteLine(Root1:+root1);35 Console.WriteLine(Root2:+root2);36 Console.WriteLine();37 Console.WriteLine(让我们尝试随机生成方程:);38 System.Random generator=new Random(DateTime.

6、Now.Millisecond);39 a=generator.Next(100)-50;40 b=generator.Next(35);41 c=generator.Next();42 Console.WriteLine(随机生成的方程是:+a+x2+b+x+c);43 Console.WriteLine();44 test=generator.NextDouble();45 Console.WriteLine(test:0.01.0:+test);46 test=generator.NextDouble()*10;47 Console.WriteLine(test:0.010.0:+tes

7、t);48 Console.ReadLine();49 50 51 代码分析:2 该例中使用了StringBuilder类,由于该类在名称空间System.text中,因此using语句导入该名称空间。9 新建StringBuilder类的实例对象former,初始值为“原始字符串为:”。10 定义StringBuilder类的对象total,未对其进行初始化。11 定义string类型变量3个:mutation1、mutation2和mutation3,用于进行字符串数据的处理。12 定义int类型变量3个:a、b、c,用于进行整数数据的处理。13 定义double类型变量3个:root1、

8、root2、test,用于进行小数数据的处理。1415 输出StringBuilder的实例对象former的内容和长度。16 在StringBuilder的实例former的末尾连接上字符串“ax2+bx+c”,将连接后的字符串赋值到StringBuilder的实例对象total中。17 将StringBuilder的实例total通过ToString()方法转换为字符串,并通过ToUpper()方法转换为大写,并赋值到字符串变量mutation1中。18将字符串变量mutation1中的X替换为y,并将替换后的结果赋值到字符串变量mutation2中。19 取字符串变量mutation2中

9、从第22个字符开始的9个字符,作为子串赋值到字符串变量mutation3中。注意:字符串的索引是从0开始的,所以第1个字符的索引是0,第22个字符的索引是21。2024将处理后的数值输出。2530在用户屏幕上输入3个整数,每个数以一个回车结束。这3个数值被赋值到a、b、c 3个变量中。注意:ReadLine()函数接收以回车结束的一行数据。3133用来求方程的根。31 求判别式“b2-4ac”的值,这里用到数学函数Math.Pow(b,2),表示b的平方。Pow函数用来求数的n次方。3233用公式求方程的两个根。数学函数Math.Sqrt()用来求函数所带参数的平方根。38 生成随机类的实例对

10、象generator,使用当前系统时间DateTime.Now.Millisecond作为种子值,这样可以增加随机性。39 生成一个-5049之间的随机数,赋值给a。40 生成一个034之间的随机数,赋值给b。41生成一个整数int范围内的随机数,赋值给c。42 输出生成的随机方程。4447 生成随机小数,调整范围并输出。2.1.3 知识点知识点1.NET框架类之框架类之Math类类C#标准类库的System命名空间中定义了大量的常用类。其中Math类中提供了大量的基本数学函数,用来帮助我们执行数学计算。该类主要为三角函数、对数函数和其它通用数学函数提供常数和静态方法。表2.1列出了Math类

11、的一些方法和说明,由于数量较多、用法较简单,这里不一一详解。要查找如何使用每个方法的其它信息,可以搜索帮助文件的“Math Member”。表 2.1 Math 类 方 法 说 明 E 代表自然对数基(e),通过常量指定 PI 代表圆周率(),圆周和直径的比,通过常量指定 Abs 返回指定数字的绝对值 Acos 为指定数字的角度返回余弦值 Asin 为指定数字的角度返回正弦值 Atan 为指定数字的角度返回正切值 Atan2 为两个指定数字的商的角度返回正切值 BigMul 生成两个 32位数字的完整乘积 Ceiling 返回大于或等于指定数字的最小整数 Cos 返回指定角度的余弦值 Cosh

12、 返回指定角度的双曲余弦值 DivRem 计算两个数字的商,并在输出参数中返回余数 Exp 返回 e 的指定次幂 Floor 返回小于或等于指定数字的最大整数 IEEERemainder 返回一指定数字被另一指定数字相除的余数 Log 返回指定数字的对数 Log10 返回指定数字以10 为底的对数 Max 返回两个指定数字中较大的一个 Min 返回两个数字中较小的一个 Pow 返回指定数字的指定次幂 Round 将值舍入到最接近的整数或指定的小数位数 Sign 返回表示数字符号的值 Sin 返回指定角度的正弦值 Sinh 返回指定角度的双曲正弦值 Sqrt 返回指定数字的平方根 Tan 返回指

13、定角度的正切值 Tanh 返回指定角度的双曲正切值 Truncate 计算一个数字的整数部分 Math类中的所有方法都是静态方法(static methods),也称为类方法(class methods)。静态方法可以通过定义它们的类名来触发,不需要首先实例化一个类的对象。Math类的方法用于进行数学运算,它们的返回值就是运算结果,可以根据需要用于表达式。例如,下面语句计算变量price的绝对值,将它加上变量aigo的值的3次方,然后将结果存储到变量total中:total=Math.abs(price)+Math.pow(aigo,3);2.1.4 知识点知识点2.NET框架类之框架类之Ra

14、ndom类类我们在编写实际应用软件的时候,经常需要用到随机数。如游戏中经常要用随机数来表示掷骰子和扑克发牌,网络考试系统中用随机数来从题库中抽取考题,飞行模拟也可以使用随机数来模拟飞机引擎发生故障的几率等。Random类是System命名空间的一部分,表示伪随机数生成器(pseudo random number generator)。它是一种能够产生满足某些随机性统计要求的数字序列的设备。随机数生成器从一个程序员指定的范围内提取一个值。由于这是用一种确定的数学算法选择的,是以相同的概率从一组有限的数字中选取的,因此所选数字并不具有完全的随机性。但是从实用的角度而言,其随机程度已足够了。表2.2

15、中列出了Random类的一些常用方法。其中,Next方法用来产生随机整数。它可以不带参数,这样表示产生一个整个int范围内的随机值,包括负数。但是,实际问题中通常需要更具体的范围,可以使用带参数的Next方法返回一个从0到比给定参数(maxValue)小1的范围内的整数值。表 2.2 Random 类 方 法 说 明 构造函数:public Random();public Random(int Seed);用于初始化 Random 类的一个新实例,如果有种子值(Seed),则使用指定的种子值 建议:可以使用 DateTime.Now.millisecend 作为种子值,这是基于程序开始运行的时

16、间的随机数 public virtual int Next(int maxValue);返回一个比指定最大值maxValue 小的非负的数 public virtual double NextDouble();返回一个介于 0.0 和 1.0 之间的随机数 protected virtual double Sample();返回一个介于 0.0 和 1.0 之间的随机数 例如模拟筛子时,需要一个16之间的随机整数值。就可以调用Next(6)来得到一个05之间的随机数,然后加上1,即Next(6)+1。可以看出,传递给Next方法的值也就是可能得到的随机数的数量。可以根据实际情况增加或减去适当的

17、数量来改变随机数范围。同样的道理,NextDouble方法返回的是0.01.0之间的浮点数。如果需要,可以通过乘法来调节结果。2.1.5 知识点知识点3.NET框架类之框架类之String类类在学习情境一中,我们已经知道了C#支持的基本数据类型。其中,有用来存放单个字符的char 类型,它们用单引号表示。那么,由多个字符组成、用双引号表示的字符串该如何表示呢?在C#中,string作为一种内在的或者原始的数据类型来使用。它可以用简单的变量初始化来创建。实际上,在C#中也包含了一个类名称为String,它是string关键字的一个别名,二者可以互换使用。在我们的实例代码中使用关键字string,

18、但是如果在联机帮助文档中查找 string,则指向的是String类。这并不矛盾,因为在内部,C#将所有原始类型均表示为类。表 2.3 String 类 方 法 说 明 公共字段 Empty 表示空字符串。此字段为只读 公共属性 Length 获取此实例中的字符数 公共方法 Compare 比较两个指定的 String 对象 Concat 连接 String 的一个或多个实例,或是 Object 的一个或多个实例的值的 String 表示形式 Copy 创建一个与指定的 String 具有相同值的 String 的新实例 Equals 确定两个 String 对象是否具有相同的值 Format

19、 将指定的 String 中的每个格式项替换为相应对象的值的文本等效项 IndexOf 报告 String 的一个或多个字符在此字符串中的第一个匹配项的索引 Insert 在此实例中的指定索引位置插入一个指定的 String 实例 Join 在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串 LastIndexOf 报告指定的 Unicode 字符或 String 在此实例中的最后一个匹配项的索引位置。PadLeft 右对齐此字符串中的字符,在左边用空格或指定的 Unicode 字符填充以达到指定的总长度 PadRight 左对齐此字符串中的字符,

20、在右边用空格或指定的 Unicode 字符填充以达到指定的总长度 Remove 从此实例中删除指定个数的字符 Replace 将此实例中的指定 Unicode 字符或 String 的所有匹配项替换为其它指定的Unicode 字符或 String Split 返回包含此实例中的子字符串(由指定Char或String数组的元素分隔)的String数组 Substring 从此实例检索子字符串 ToLower 返回此 String转换为小写形式的副本 ToString 将此实例的值转换为 String ToUpper 返回此 String转换为大写形式的副本 公共操作和索引=如果运算符两边的字符串

21、有相同的值(内容),则返回 true,反之返回false!=如果运算符两边的字符串有不同的值(内容),则返回 true,反之返回false 返回指定索引(中的数字)处的字符,索引从 0 开始 让我们来看看String数据类型的基本操作:string s1=orange;string s2=red;s1+=s2;System.Console.WriteLine(s1);/输出 orangereds1=s1.Substring(2,5);System.Console.WriteLine(s1);/输出 angers1=s1.ToUpper();System.Console.WriteLine(s1

22、);/输出 ANGER在C#中,字符串对象是“不可变的”,任何对String的修改都会创建一个新String对象。在前面的示例中,语句“s1+=s2;”将s1和s2的内容连接起来以构成一个字符串,+=运算符会创建一个包含内容为“orangered”的新字符串,由s1引用。包含orange和red的两个字符串均保持不变。而原来由s1引用的包含orange的字符串仍然存在,但将不再被引用。同理,“s1=s1.Substring(2,5);”、“s1=s1.ToUpper();”也分别创建了新字符串给s1引用。大量的类似字符串相加操作的时候,就会有很多字符串像s1一样不再被引用,从而造成内存资源的极

23、大浪费。当我们需要对字符串执行重复修改的情况下,例如在一个循环中将许多字符串连接在一起时,使用String类,系统开销可能会非常大。如果要修改字符串而不创建新的对象,则C#中还有另外一种创建和使用字符串的格式,即System.Text.StringBuilder类。解决这种问题时使用StringBuilder类可以提升性能。StringBuilder类必须使用new运算符来创建对象。以下语句声明了一个StringBuilder类的对象MyStringBuilder,并将其初始化为Hello World!:StringBuilder MyStringBuilder=new StringBuild

24、er(Hello World!);StringBuilder类支持很多和String类中一样的属性和方法,并且在很多情况下,它们在代码中的用法是类似的。表2.4中列出了StringBuilder类的一些构造函数和常用成员。表2.4 StringBuilder 类 公共构造函数(public)StringBuilder()构造默认容量的 StringBuilder 类的新实例 StringBuilder(Int32)构造指定容量的 StringBuilder 类的新实例 StringBuilder(String)使用指定的字符串初始化StringBuilder 类的新实例 StringBuild

25、er(Int32,Int32)构造有指定容量并且可增长到指定最大容量的StringBuilder类的新实例 StringBuilder(String,Int32)使用指定的字符串和容量初始化 StringBuilder 类的新实例 公共属性 Capacity 获取或设置可包含在当前实例所分配的内存中的最大字符数 Length 获取或设置当前 StringBuilder 对象的长度 MaxCapacity 获取此实例的最大容量 续表 方 法 说 明 公共方法 Append 在此实例的结尾追加指定对象的字符串表示形式 AppendFormat 向此实例追加包含 0 个或更多格式规范的格式化字符串。

26、每个格式规范由相应对象参数的字符串表示形式替换 EnsureCapacity 确保 StringBuilder 的此实例的容量至少是指定值 Equals 返回一个值,该值指示此实例是否与指定的对象相等 GetType 获取当前实例的 Type(从 Object 继承)Insert 将指定对象的字符串表示形式插入到此实例中的指定字符位置 Remove 将指定范围的字符从此实例中移除 Replace 将此实例中所有的指定字符或字符串替换为其它的指定字符或字符串 ToString 将 StringBuilder 的值转换为 String 公共操作和索引 返回指定索引的字符,索引从 0开始 Strin

27、g和StringBuilder两种类型之间的转换方法如下:要从一个String对象中得到一个StringBuilder对象,可使用StringBuilder类的构造函数public StringBuilder(String);要从StringBuilder对象中得到String对象,可使用ToString方法。演示如下:StringBuilder myStringBuilder=new StringBuilder(myString);String myString=myStringBuilder.ToString();关于new运算符和构造函数等概念,将在下一个任务中详细介绍。2.2 任务二:

28、学生类的初步设计任务二:学生类的初步设计 2.2.1 功能描述功能描述创建类及对象:本任务设计一个学生基本信息的实体类,并在Windows应用程序的窗体中调用该类。本任务在窗体类中创建并修改学生类实例对象的属性,通过学生类实例调用类中公共方法,最后将调用的结果显示在窗体的label控件上。运行结果如图2.1所示。图2.1 在已有项目中增加一个新类有两种方法。(1)选择“项目添加类”菜单项。选中后,Visual Studio 将显示“添加新项”对话框,并在模板中已选中“类”。(2)右击解决方案,选择“添加添加类”。和第(1)种方法一样,Visual Studio将显示“添加新项”对话框。输入类名

29、Student后点击确定,Visual Studio为我们增加一个新类并显示默认的代码。在该代码框架中添加所需代码后,学生信息实体类的基本设计就完成了。2.2.2 代码展示代码展示1 using System;2 /*3 *类名:Student4 *创建日期:2009-03-295 *功能描述:学生信息实体类6 */7 namespace WindowsApplication28 9 Serializable10 public class Student 11 12#region Private Members13 protected int id;14 protected int class

30、ID;15 protected string studentNO=String.Empty;16 protected string studentname=String.Empty;17 protected string sex=String.Empty;18 protected string address=String.Empty;19 protected double postalCode;20#endregion21#region Public Properties22 public int Id23 24 get return id;25 26 public int ClassID2

31、7 28 get return classID;29 set classID=value;30 31 public string StudentNO32 33 get return studentNO;34 set studentNO=value;35 36 public string StudentName37 38 get return studentname;39 set studentname=value;40 41 public string Sex42 43 get return sex;44 set sex=value;45 46 public string Address47

32、48 get return address;49 set address=value;50 51 public double PostalCode52 53 get return postalCode;54 set postalCode=value;55 56#endregion57 public bool istownee(string s1,string s2)58 59 return(s1=s2);60 61 public void editStu(string sNo,string sAdd,double sPC)62 63 this.StudentNO=sNo;64 this.add

33、ress=sAdd;65 this.postalCode=sPC;66 67 68 代码分析:1220定义了学生信息类的私有成员。2156定义了该类的公有属性,并设置其访问器。可利用访问器来访问类的私有成员。其中,Id是只读属性,因为它只有get访问器。5760这是一个公有布尔类型的方法,含有两个字符串类型的参数。利用return语句返回(s1=s2)的值。若两个字符串相等,则返回true,否则返回false。该例中用来判断两个学生是否同乡。6166这是一个公有无返回值(void)的函数,有3个参数。该函数用来编辑学生的学号、地址和邮编。由关键字void修饰的函数无需return语句。本任务在

34、窗体类Form1的载入事件中调用该学生类,代码如下:1 private void Form1_Load(object sender,EventArgs e)2 3 Student stu1=new Student();4 Student stu2=new Student();5 stu1.Address=福建漳州;6 stu2.Address=福建厦门;7 label1.Text=学生一:+stu1.Address+n;8 label1.Text+=学生二:+stu2.Address+n;9 label1.Text+=两个学生是同乡:;10 label1.Text+=stu1.istownee

35、(stu1.Address,stu2.Address).ToString();11 label1.Text+=n;12 stu2.editStu(081023,福建漳州,363000);13 label1.Text+=stu2.StudentNO+stu2.Address+stu2.PostalCode;14 代码分析:34创建Student类的两个实例stu1和stu2。56将两个实例的Address属性分别设置为福建漳州和福建厦门。713将设置好的地址属性添加到文本标签label中。详解见下。10 调用istownee函数返回一个布尔值,并将其转换为字符串类型显示。12 调用editStu

36、函数将stu2的学号、地址和邮编属性修改为给定的值:081023,福建漳州和363000。13 将修改后的学号、地址和邮编属性添加到label1中显示出来。2.2.3 知识点知识点1方法的解析方法的解析1.类和对象类和对象在深入学习类之前,作为初学者,让我们先分清类和对象的概念。类是一个抽象的概念,对象则是类的具体实例。比如学生是一个类,张三、李四、王五都是对象;首都是一个类,北京、华盛顿、莫斯科都是对象;动画猫是一个类,Kitty、Garfield和Doraemon都是对象。类是抽象的概念,对象是真实的个体。我们可以说张三(对象)的体重是55 kg,而不能说学生(类)的体重是55kg;可以说

37、北京2008年举办了奥运会,而不能说首都在2008年举办了奥运会。一般情况下我们认为状态是描述具体对象而不是描述类的,行为是由具体对象发出的,而不是由类发出的。现实生活中到处都是对象,一个学生、一辆汽车,一头大象,乃至一种语言、一种方法,都可以称为对象。2.学生类的组成部分学生类的组成部分我们看到,学生类由学生的数据声明和方法声明组成。数据声明表现为变量;方法则表现为给定名称的、具有特定功能的一组代码。在C#中,方法都是某个类的一部分。当程序调用一个方法时,C#将控制流程传递给这个方法,按照流程一行一行地执行方法中的语句。方法执行完成后,控制流程返回程序调用方法的地方,继续原来的执行。被触发的

38、方法也称为被调方法(called method),触发它的方法称为主调方法(calling method)。如果它们在同一个类中,则调用只需要使用方法名;如果它们不在同一个类中,则要通过其它类的对象名来触发(静态方法可以通过类名或者对象名来访问)。图2.2显示了方法调用时的执行流程。图2.2 3.return语句语句 return语句用在方法中。程序执行到return语句直接返回方法调用语句。Return语句有两种方式:无表达式的return语句只能用在无返回值的成员中;带表达式的return语句只能用在有返回值的函数成员中。(1)如果是void方法,则可以使用无表达式的return语句,也可

39、以省略。无表达式的return语句即:return;程序执行到return立即返回调用语句。如果省略return语句,则程序执行到方法的末尾才返回。(2)对于有返回值的方法,return语句后面可以是常量表达式,也可以是变量表达式,且必须和方法的返回类型是一致的,或者是可以直接隐式转换的。4.实例方法和静态方法实例方法和静态方法在这里,我们主要学习实例方法和静态方法。实例方法是较常见的方法,比如上个任务中,Random类和StringBuilder类中的绝大部分方法就都是实例方法。实例方法必须先实例化对象,再用对象调用方法。静态方法我们也提到过,那就是Math类中的所有方法。静态方法使用类名调

40、用。实例方法的语法格式如下:访问修饰符 返回类型 方法名(参数列表)/方法的主体 /由return语句返回示例:实现两个整型的加法。class Add public int Sum(int para1,int para2)return para1+para2;使用实例方法:Add myAdd=new Add();/实例化一个对象 int sum=myAdd.Sum(2,3);/调用方法 使用static修饰的方法称为静态方法:class mySwap public static void Swap(int num1,int num2)int temp;temp=num1;num1=num2;n

41、um2=temp;静态方法使用类名调用:class Program static void Main(string args)int num1=5,num2=10;mySwap.Swap(num1,num2);表2.5 静态方法和实例方法的比较 静 态 方 法 实 例 方 法 static 关键字 不需要 static 关键字 使用类名调用 使用实例对象调用 可以访问静态成员 可以直接访问静态成员 不可以直接访问实例成员 可以直接访问实例成员 不能直接调用实例方法 可以直接访问实例方法和静态方法 调用前初始化 实例化对象时初始化 5.方法的重载方法的重载让我们回想一下刚刚看过的程序片段:pub

42、lic int Sum(int para1,int para2)return para1+para2;该方法实现两个整数的相加。那如果我们想让两个string型或两个double型相加,该怎么做?如果我们为string、double再各自写一个方法,那么我们在调用之前就要先清楚参数的类型。能不能不管参数是什么类型,都不影响函数的调用呢?这就要用到方法的重载。在同一个类中添加几个名字相同、参数与返回值不同的方法,比如:public string Sum(string para1,string para2)return para1+para2;public double Sum(double pa

43、ra1)return para1+para1;2.2.4 知识点知识点2域和属性域和属性为了保存类的实例的各种数据信息,C#提供了两种方法:域和属性。域(字段)和属性都可以从界面中添加。1.添加域添加域打开类视图,右击要添加域的类,在弹出的菜单中选择“添加添加字段”命令。选择后,Visual Studio弹出“添加字段”对话框。在对话框中可设置字段的访问、字段类型、字段名和字段修饰符等信息,还可以设置字段的注释说明文字。设置完成后,单击“完成”,类的代码中将被Visual Studio添加字段的声明语句。如:protected int classID;其中,字段的访问修饰符可以是以下几种:ne

44、w public protected internal private static readonly 静态域的声明使用static修饰符,只读使用readonly修饰符,其它都是非静态域。声明成只读的字段和声明成const的效果是一样的。声明成只读字段的示例如下:public static readonly double PI=3.14159;const和readonly的区别在于:const型表达式的值在编译时形成,而static readonly表达式的值直到程序运行时才形成。2.域域(字段字段)的初始化的初始化Visual Studio为每个未经初始化的变量自动初始化为本身的默认值。对

45、于所有引用类型的变量,默认值为null。所有变量类型的默认值见表2.6。表 2.6 各种变量类型的默认值 变 量 类 型 默 认 值 char x0000 sbyte,byte,short,ushort,int,uint,long,ulong 0 decimal 0.0m float 0.0f double 0.0d enum 0 struct null bool false 3.添加属性添加属性在类视图中,右击要添加域的类,选择“添加”“添加属性”命令,则弹出添加属性对话框。和字段一样,新增属性也可以设置很多信息。其中,访问器一栏表示该属性在被外部访问时,是只能读取(获取)、只能写入(设置)

46、还是可读取加写入。以下是Visual Studio自动生成的代码:public int ClassID get set 属性的修饰符有以下几种:new public protected internal private static virtual sealed override abstract其中,static、virtual、override和abstract这几个修饰符不能同时使用。事实上,C#中属性的概念是作为一个接口存在的,属性真正的值是存放在私有字段中的。接口的意思就如同我们看电视时用遥控器换频道,遥控器就是一个接口。也许变换频道也可以通过打开电视机后盖,直接操作里面的电路来实现

47、,但我们通过遥控器来操作会更加安全方便,因为遥控器控制了电视器件的可访问性,保护了内部数据的安全。在意义上表达属性完整的代码其实比上面自动生成的代码多了一行,就是下面的第1行,那才是真正存放数据的私有字段。private int age;/年龄public int Age get return age;set if(value 0&value 150)/判断用户企图设置的数值是否合理。age=value;else age=0;设置器中通过一个判断语句来考察用户设置的数值是否合理,以保护内部数据的安全,防止被不合理地修改。所以我们建议类内部敏感字段使用属性来控制访问。在属性的访问声明中:只有se

48、t访问器表明属性的值只能进行设置而不能读出;只有get访问器表明属性的值是只读的,不能改写;同时具有set访问器和get访问器表明属性的值的读/写都是允许的。添加方法和索引器的向导对话框一目了然,这里就不一一列举了。2.2.5 知识点知识点3调试:查看对象变量的内容调试:查看对象变量的内容在学习情景一中,我们已经学习了设置断点和查看变量的内容。现在让我们来看看如何查看对象的内容。同样,先在代码中设置断点,如图2.3所示。图2.3 图2.4 2.3 任务三:学生类的进阶设计任务三:学生类的进阶设计2.3.1 功能描述功能描述本任务是在任务二的基础上再作进一步的设计,主要示范重构的构造函数。其它知

49、识点“封装”已经在上个任务的代码中体现出来,“继承”在知识点中有详细例程,请读者根据例程自行练习。重构的构造函数演示效果如图2.5所示。图2.5 2.3.2 代码展示代码展示学生类中的代码框架和上个任务相同,这里不再占用篇幅,只给出构造函数。public Student()public Student(int i,string s1,string s2,string s3)this.classID=i;this.studentNO=s1;this.studentname=s2;this.sex=s3;这两个名字相同的函数是构造函数。第一个为成员变量分配内存空间,给出默认初值;第二个为新建的学生

50、实例初始化基本信息:班级号、学号、姓名和性别。编译器会自动根据参数来选择不同的构造函数。下面是使用不同构造函数实例化对象并显示在label控件上的代码:label1.Text+=n学生三:;Student stu3=new Student();Student stu4=new Student(1002,080137,祝英台,女);label1.Text+=stu3.ClassID+stu3.StudentName+stu3.StudentNO+stu3.Sex;label1.Text+=n学生四:;label1.Text+=stu4.ClassID+stu4.StudentName+stu4.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C#程序设计及基于工作过程的项目开发》课件第2章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|