《C-程序设计项目教程》教学课件-项目七_第1页
《C-程序设计项目教程》教学课件-项目七_第2页
《C-程序设计项目教程》教学课件-项目七_第3页
《C-程序设计项目教程》教学课件-项目七_第4页
《C-程序设计项目教程》教学课件-项目七_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

C#程序设计

工程教程计算机“十二五〞规划教材工程七C#程序设计

工程教程计算机“十二五〞规划教材工程七C#程序设计工程教程工程七类与对象——抽象与实体的完美结合学习任务掌握类的声明方法。掌握对象的创立和使用方法。掌握构造函数和析构函数的使用方法。掌握this关键字和属性的使用方法。C#程序设计工程教程工程七类与对象——抽象与实体的完美2C#程序设计工程教程任务安排任务一初识类与对象

任务二

深入学习类的成员

工程七类与对象——抽象与实体的完美结合C#程序设计工程教程任务安排工程七类与对象——抽象与实3C#程序设计工程教程任务一初识类与对象任务说明预备知识在本任务中,将向读者介绍类与对象的根本知识。一、声明类类需要先声明后使用,声明类的语法结构如下:[<修饰符>]class<类名>[:<基类名>]{//类成员}//无需分号声明类时先指定类本身的修饰符,类的修饰符包括访问修饰符〔internal、public、private和protected〕和其他功能修饰符〔new、abstract、sealed和partial〕,当有两种修饰符同时修饰类时,访问修饰符排在功能修饰符前;然后是类的名称、基类〔如果此类为继承类〕;声明头后面是类体,类体由一对大括号组成,类体中包含C#的类成员。C#程序设计工程教程任务一初识类与对象任务说明预备知识在4C#程序设计工程教程各修饰符含义如下表所示:注意:abstract不能和new同时用,

类继承时如果基类的可访问性比派生类的可访问性低,那么不可以继承;abstract和sealed修饰符也是被禁止同时使用的。C#程序设计工程教程各修饰符含义如下表所示:注意:5C#程序设计工程教程下面我们先来简单了解一下嵌套类、基类与派生类的概念。〔一〕嵌套类在类或结构内声明的类称为嵌套类〔nested-type〕,在编译单元或命名空间内声明的类为非嵌套类。usingSystem;classA{privateclassB{staticvoidF(){Console.WriteLine("......");}}}类B在类A中声明,是嵌套类;类A在编译单元内声明,是非嵌套类。C#程序设计工程教程下面我们先来简单了解一下嵌套类、基类与派6C#程序设计工程教程〔二〕基类与派生类在定义类的时候,如果类n继承自类m,那么将类m称为类n的基类,类n那么是类m的派生类。例如,下面代码中定义的MobilePhone类就是类Phone的派生类,类Phone是类MobilePhone的基类。publicclassMobilePhone:Phone{//类成员}每一个类只能指明一个基类,并且内部类可以继承一个公共类,但是公共类不能继承一个内部类。C#程序设计工程教程〔二〕基类与派生类在定义类的7C#程序设计工程教程二、类的成员创立一个C#类后,在类内的所有元素都是这个类的成员,可以将其分为数据成员和函数成员两类。〔一〕数据成员数据成员包括字段和常量两种。1.字段在类内定义的变量成员被称之为字段。字段可以预先初始化声明,声明的字段将作用于整个类。classPhone{stringcompany="NOKIA"; //定义一个变量用于存储品牌名称floatprice=2021; //定义一个变量用于存储价格}C#程序设计工程教程二、类的成员创立一个C#类8C#程序设计工程教程根据修饰符的不同,字段可以分为静态字段、实例字段和只读字段。〔1〕静态字段

用修饰符static声明的字段称为静态字段,静态字段属于类而不属于某个对象。引用静态字段的方法为:类名.静态字段名。〔2〕实例字段未使用修饰符static的字段都可以称为实例字段。每创立类的一个对象就会在对象内创立一个该字段实例,创立它的对象被撤销该实例字段也被撤销。引用实例字段的方法为:实例名.实例字段名。〔3〕只读字段

使用readonly修饰符声明的字段为只读字段。只读字段是特殊的实例字段,它只能在字段声明或构造函数中重新赋值,在其他任何地方都不能改变只读字段的值。C#程序设计工程教程根据修饰符的不同,字段可以分为静态字段、9C#程序设计工程教程2.常量用const修饰符声明的字段为常量。常量只能在声明中初始化,以后不能再修改。classMobilePhone{conststringcompany="NOKIA"; //定义一个常量用于存储品牌名称floatprice=1999; //定义一个变量用于存储价格conststringmodel="N98"; //定义一个常量用于存储型号}C#程序设计工程教程2.常量用const修饰符声明的10C#程序设计工程教程来看一个综合应用数据成员的例子:publicclassTest{ publicconstintintMax=int.MaxValue; //常量,必须赋初值publicintx=0; //实例字段publicreadonlyinty=0; //只读字段publicstaticintcnt=0; //静态字段publicTest(intx1,inty1) //构造函数{//intMax=0; //错误,不能修改常量x=x1; //在构造函数内允许修改实例字段y=y1; //在构造函数内允许修改只读字段cnt++;}//每创立一个对象都调用构造函数,用此语句可以记录对象的个数publicvoidModify(intx1,inty1){//intMax=0; //错误,不能修改常量 x=x1; cnt=y1; //y=10; }} //不允许修改只读字段C#程序设计工程教程来看一个综合应用数据成员的例子:publ11C#程序设计工程教程〔二〕函数成员C#类的函数成员主要包括方法、属性、索引器、事件、运算符、构造函数和析构函数。classClass1{staticvoidMain(string[]args){ TestT1=newTest(100,200); T1.x=40; //引用实例字段方法:实例名.实例字段名 Testt=0; //引用静态字段方法:类名.静态字段名 intz=T1.y; //引用只读字段 z=TMax; //引用常量}}C#程序设计工程教程〔二〕函数成员C#类的函数成12C#程序设计工程教程〔三〕类成员访问修饰符所有类成员都具有可访问性级别,可通过访问修饰符来控制类成员的可访问范围,以实现数据和代码的隐藏。C#定义了如下五种访问修饰符,其含义如下表所示。C#程序设计工程教程〔三〕类成员访问修饰符所有类13C#程序设计工程教程三、对象C#中的类是抽象的,如果要使用类来实现某项特定功能,必须要将类实例化,既创立类的对象。这里读者可以将类理解为生产产品时用到的模具,而对象就是生产出来的产品。〔一〕创立对象在类中创立对象的格式如下:<对象名>=new<构造方法名>([参数列表]);为Phone类创立一个对象Nokia,代码如下:PhoneNokia=newPhone();在C#面向对象程序设计语言中,创立类的对象、创立类的实例和实例化类等说法含义相同,都是以类为模板生成一个类对象。在使用关键字new创立一个类的对象时,将为对象分配一块内存,每一个对象都有不同的内存,因此,两个不同的对象,即使他们的代码都相同,也是单独的两个个体。C#程序设计工程教程三、对象C#中的类是抽象的,如14C#程序设计工程教程〔二〕使用对象在C#中,类对象使用点运算符“.〞来引用类中成员,并且引用的范围受成员的访问修饰符的限制。classclass1 //定义一个类class1{publicstringstr; //定义字符型公共变量strprotectedstringstr1; //定义字符型受保护变量str1privatestringstr2; //定义字符型私有变量str2internalstringstr3; //定义字符型内部变量str3publicvoidway() //定义一个没有任何返回类型的公共方法

way{……}}classclass2{publicstaticvoidMain(){class1dx=newclass1(); //创立一个class1的对象dxdx.str="a"; //此条语句正确,在程序内能引用public成员//dx.str1="b"; //此条语句错误,在类外不能引用protected成员//dx.str2="c"; //此条语句错误,在类外不能引用private成员dx.str3="d"; //此条语句正确,在程序内能引用internal成员dx.way(); //此条语句正确,在程序内能引用public成员}}C#程序设计工程教程〔二〕使用对象在C#中,类对15C#程序设计工程教程任务实施——获取品牌信息使用“类与对象〞的相关知识创立应用程序,在程序中完成类的建模,并根据类生成新的对象,根据用户输入的品牌名称,输出相应信息。任务说明实施步骤步骤1新建一个控制台应用程序,将其命名为Phone,在文件中输入创立类与对象的代码,如【代码7-1】所示。C#程序设计工程教程任务实施——获取品牌信息使16C#程序设计工程教程【代码7-1】创立类与对象。namespacePhone{publicclass //创立一个“〞类{publicstring品牌;publicstring型号;publicstring颜色;publicdecimal价格;}class移动 //创立一个移动类{publicvoid1() //定义一个方法“1〞{1=new(); //创立一个新的对象“1〞1.品牌="NOKIA“;1.型号="N98";1.颜色="黑色“;1.价格=4999;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+1.品牌);Console.WriteLine("型号:"+1.型号);Console.WriteLine("颜色:"+1.颜色);Console.WriteLine("价格:"+1.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}C#程序设计工程教程【代码7-1】创立类与对象。17C#程序设计工程教程publicvoid2() //定义一个方法“2〞{2=new();//创立一个新的对象“2〞2.品牌="MOTO“;2.型号="MOTOME525";2.颜色="红色“;2.价格=1989;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+2.品牌);Console.WriteLine("品牌:"+2.型号);Console.WriteLine("型号:"+2.颜色);Console.WriteLine("颜色:"+2.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}publicvoid3() //定义一个方法“3〞{3=new();//创立一个新的对象“3〞3.品牌="联想“;3.型号="联想E268翻盖";3.颜色="珍珠白“;3.价格=1399;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+3.品牌);Console.WriteLine("型号:"+3.型号);Console.WriteLine("颜色:"+3.颜色);Console.WriteLine("价格:"+3.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}C#程序设计工程教程publicvoid2()18C#程序设计工程教程staticvoidMain(string[]args){Console.WriteLine("请输入品牌名称:NOKIA、MOTO、Lenovo");stringinput=Console.ReadLine();移动Mobile=new移动();switch(input){case"NOKIA":Mobile.1();break;case"MOTO":Mobile.2();break;case"Lenovo":Mobile.3();break;default:Console.WriteLine("请输入正确的品牌名称!");Console.ReadKey();break;}}}}C#程序设计工程教程staticvoidMain(st19C#程序设计工程教程步骤2按【F5】键,调试程序,得到如以下图所示的运行结果。C#程序设计工程教程步骤2按【F5】键,调试程序,得到如20C#程序设计工程教程任务二深入学习类的成员任务说明本任务中将学习类中较难理解的一些概念。预备知识一、构造函数〔一〕构造函数的概念构造函数具有与类相同的名称,用于在创立对象时初始化对象。其声明格式如下:class类名称 //创立类{public类名称([参数列表])//创立构造函数{……}}C#程序设计工程教程任务二深入学习类的成员任务说明本任务21C#程序设计工程教程每个类都有构造函数,即使我们没有声明它,编译器也会自动为我们提供一个默认的构造函数。构造函数与普通方法的不同之处在于:构造函数的名称必须和类名完全相同。构造函数没有返回值,也不能用void来修饰。构造函数一般不能直接显式调用,在创立对象时系统会自动调用。C#程序设计工程教程每个类都有构造函数,即使我们没22C#程序设计工程教程〔二〕构造函数的重载在C#中,一个类可以有多个构造函数,其重载方法与普通方法相同,用户可以通过传递不同的参数来实现对不同类实例的初始化处理。〔三〕使用私有构造函数如果将构造函数声明为private类型,那么说明此类不允许其他类〔除了嵌套类〕创立该类的实例,通常只用于含有静态成员的类。〔四〕使用静态构造函数用关键字static声明的构造函数称为静态构造函数,当用户需要初始化一些静态变量的时就需要使用静态构造函数。静态构造函数只会执行一次,它是属于类的,而不是只属于某个实例。C#程序设计工程教程〔二〕构造函数的重载在C#中,一23C#程序设计工程教程类中的静态构造函数具有以下特点:既没有访问修饰符,也没有参数。在创立第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。用户不能直接调用静态构造函数且无法控制何时执行静态构造函数。一个类只能有一个静态构造函数,但可以同时拥有静态构造函数和实例构造函数。静态构造函数只能访问类的静态成员,不能访问实例成员。C#程序设计工程教程类中的静态构造函数具有以下特点:既24C#程序设计工程教程二、析构函数构造函数的功能是在创立对象时将对象初始化。析构函数与构造函数的功能正好相反,它用来释放一个对象所占用的内存。析构函数的名称由类名前加上“~〞字符构成,声明格式如下:class类名{~类名()//声明析构函数{......}}析构函数具有以下几个特征:

没有返回值,没有修饰符,也没有参数一个类只能有一个析构函数

不能继承或重载析构函数

不能显式调用析构函数,它们是系统自动调用的C#程序设计工程教程二、析构函数构造函数的功能是在创25C#程序设计工程教程三、this关键字关键字this有两种根本的用法:一是访问当前类成员,二是在声明构造函数时指定需要先执行的构造函数。〔一〕访问当前类成员在使用this关键字访问当前类成员时要注意以下两点:this是类中隐含的引用变量,它是被自动被赋值的,可以使用但不能被修改。类的静态成员不是某个对象的一局部,因此,在静态方法中引用this关键字是错误的。C#程序设计工程教程三、this关键字关键字this26C#程序设计工程教程〔二〕this用于构造函数声明在C#构造函数中,可以使用如下的形式来声明构造函数:<访问修饰符>类名(形式参数表):this(实际参数表){//语句块}其中this表示该类本身所声明的、形式参数表与实际参数表最匹配的另一个实例构造函数,这个构造函数会在执行正在声明的构造函数之前执行。C#程序设计工程教程〔二〕this用于构造函数声明在C#构造27C#程序设计工程教程classM //定义M类{publicM(intn) //声明一个关键字的构造函数{Console.WriteLine("M.M(intn)");}publicM(strings,intn):this(0) //声明两个关键字的构造函数{Console.WriteLine("M.M(strings,intn)");}}classTest //定义Test类{staticvoidMain(){Ma=newM("MClass",1); //定义实例对象aConsole.ReadKey();}}C#程序设计工程教程classM //定义M类28C#程序设计工程教程四、属性为防止在对象不知道的情况下私有字段被更改,C#中提出了属性的概念,其定义的形式为:访问修饰符数据类型标识符{//访问器声明;}访问器有get访问器和set访问器两种,其声明的格式如下:get{return要访问的成员;}set{要设置值的成员=value;}value是C#的关键字,是进行属性操作时set的隐含参数。C#程序设计工程教程四、属性为防止在对象不知道的情29C#程序设计工程教程属性提供了两种访问操作:get和set〔至少应包括其中的一个〕。当读取属性时,执行get访问器的代码块;当向属性分配一个新值时,执行set访问器的代码块。不具有set访问器的属性被视为只读属性,不具有get访问器的属性被视为只写属性,同时具有这两个访问器的属性被视为读写属性。使用get访问器时要注意,其使用return要返回的值必须与属性声明的数据类型相同,或能够隐式地转换为属性声明的数据类型。set访问器的值是通过隐含的参数value带进来的,其数据类型也必须与属性声明的数据类型相同或能够进行隐式转换。C#程序设计工程教程属性提供了两种访问操作:get30C#程序设计工程教程publicclassDate{privateintmonth=7;publicintMonth{get{returnmonth;}set{if((value>0)&&(value<=12)){month=value;}}}}Month是作为属性声明的,这样set访问器可确保Month值设置在0和12之间。访问属性值的语法格式和访问变量根本相同:DateS=newDate();S.Month=10;C#程序设计工程教程publicclassDate31C#程序设计工程教程任务实施——计算矩形面积任务说明设计一控制台程序计算矩形的面积。通过属性的相关知识来控制矩形变长〔即长和宽数值〕的异常,当变长为负数时给出异常信息。实施步骤步骤1 新建一控制台应用程序,将其命名为Test,在文件中输入控制代码,如【代码7-2】所示。【代码7-2】namespaceTest{classmm{privateintwidth;protectedintheight;publicintWidth{get{returnwidth;}set //假设所赋的值不合理,那么会输出指定的提示。{if(value>0)width=value;elseConsole.WriteLine("宽的值不能为负数!");}}C#程序设计工程教程任务实施——计算矩形面积任务说明32C#程序设计工程教程publicintHeight{get{returnheight;}set{if(value>0)height=value;elseConsole.WriteLine("高的值不能为负数!");}}publicintArea{get{returnwidth*height;}}publicmm(){}publicmm(intx,inty){Width=x;Height=y;}C#程序设计工程教程publicintHeight33C#程序设计工程教程staticvoidMain(string[]args){mmrect=newmm();rect.Width=3;rect.Height=8;Console.WriteLine("宽={0},高={1},面积={2}",rect.Width,rect.Height,rect.Area);rect.Width=-3;rect.Height=-8;Console.WriteLine("宽={0},高={1},面积={2}",rect.Width,rect.Height,rect.Area);mmrect1=newmm(-10,-12);Console.WriteLine("宽={0},高={1},面积={2}",rect1.Width,rect1.Height,rect1.Area);Console.ReadKey();}}}C#程序设计工程教程staticvoidMain(str34C#程序设计工程教程步骤2 按【F5】键调试程序,运行效果如以下图所示。C#程序设计工程教程步骤2 按【F5】键调试程序,运行效35C#程序设计

工程教程计算机“十二五〞规划教材工程七C#程序设计

工程教程计算机“十二五〞规划教材工程七C#程序设计工程教程工程七类与对象——抽象与实体的完美结合学习任务掌握类的声明方法。掌握对象的创立和使用方法。掌握构造函数和析构函数的使用方法。掌握this关键字和属性的使用方法。C#程序设计工程教程工程七类与对象——抽象与实体的完美37C#程序设计工程教程任务安排任务一初识类与对象

任务二

深入学习类的成员

工程七类与对象——抽象与实体的完美结合C#程序设计工程教程任务安排工程七类与对象——抽象与实38C#程序设计工程教程任务一初识类与对象任务说明预备知识在本任务中,将向读者介绍类与对象的根本知识。一、声明类类需要先声明后使用,声明类的语法结构如下:[<修饰符>]class<类名>[:<基类名>]{//类成员}//无需分号声明类时先指定类本身的修饰符,类的修饰符包括访问修饰符〔internal、public、private和protected〕和其他功能修饰符〔new、abstract、sealed和partial〕,当有两种修饰符同时修饰类时,访问修饰符排在功能修饰符前;然后是类的名称、基类〔如果此类为继承类〕;声明头后面是类体,类体由一对大括号组成,类体中包含C#的类成员。C#程序设计工程教程任务一初识类与对象任务说明预备知识在39C#程序设计工程教程各修饰符含义如下表所示:注意:abstract不能和new同时用,

类继承时如果基类的可访问性比派生类的可访问性低,那么不可以继承;abstract和sealed修饰符也是被禁止同时使用的。C#程序设计工程教程各修饰符含义如下表所示:注意:40C#程序设计工程教程下面我们先来简单了解一下嵌套类、基类与派生类的概念。〔一〕嵌套类在类或结构内声明的类称为嵌套类〔nested-type〕,在编译单元或命名空间内声明的类为非嵌套类。usingSystem;classA{privateclassB{staticvoidF(){Console.WriteLine("......");}}}类B在类A中声明,是嵌套类;类A在编译单元内声明,是非嵌套类。C#程序设计工程教程下面我们先来简单了解一下嵌套类、基类与派41C#程序设计工程教程〔二〕基类与派生类在定义类的时候,如果类n继承自类m,那么将类m称为类n的基类,类n那么是类m的派生类。例如,下面代码中定义的MobilePhone类就是类Phone的派生类,类Phone是类MobilePhone的基类。publicclassMobilePhone:Phone{//类成员}每一个类只能指明一个基类,并且内部类可以继承一个公共类,但是公共类不能继承一个内部类。C#程序设计工程教程〔二〕基类与派生类在定义类的42C#程序设计工程教程二、类的成员创立一个C#类后,在类内的所有元素都是这个类的成员,可以将其分为数据成员和函数成员两类。〔一〕数据成员数据成员包括字段和常量两种。1.字段在类内定义的变量成员被称之为字段。字段可以预先初始化声明,声明的字段将作用于整个类。classPhone{stringcompany="NOKIA"; //定义一个变量用于存储品牌名称floatprice=2021; //定义一个变量用于存储价格}C#程序设计工程教程二、类的成员创立一个C#类43C#程序设计工程教程根据修饰符的不同,字段可以分为静态字段、实例字段和只读字段。〔1〕静态字段

用修饰符static声明的字段称为静态字段,静态字段属于类而不属于某个对象。引用静态字段的方法为:类名.静态字段名。〔2〕实例字段未使用修饰符static的字段都可以称为实例字段。每创立类的一个对象就会在对象内创立一个该字段实例,创立它的对象被撤销该实例字段也被撤销。引用实例字段的方法为:实例名.实例字段名。〔3〕只读字段

使用readonly修饰符声明的字段为只读字段。只读字段是特殊的实例字段,它只能在字段声明或构造函数中重新赋值,在其他任何地方都不能改变只读字段的值。C#程序设计工程教程根据修饰符的不同,字段可以分为静态字段、44C#程序设计工程教程2.常量用const修饰符声明的字段为常量。常量只能在声明中初始化,以后不能再修改。classMobilePhone{conststringcompany="NOKIA"; //定义一个常量用于存储品牌名称floatprice=1999; //定义一个变量用于存储价格conststringmodel="N98"; //定义一个常量用于存储型号}C#程序设计工程教程2.常量用const修饰符声明的45C#程序设计工程教程来看一个综合应用数据成员的例子:publicclassTest{ publicconstintintMax=int.MaxValue; //常量,必须赋初值publicintx=0; //实例字段publicreadonlyinty=0; //只读字段publicstaticintcnt=0; //静态字段publicTest(intx1,inty1) //构造函数{//intMax=0; //错误,不能修改常量x=x1; //在构造函数内允许修改实例字段y=y1; //在构造函数内允许修改只读字段cnt++;}//每创立一个对象都调用构造函数,用此语句可以记录对象的个数publicvoidModify(intx1,inty1){//intMax=0; //错误,不能修改常量 x=x1; cnt=y1; //y=10; }} //不允许修改只读字段C#程序设计工程教程来看一个综合应用数据成员的例子:publ46C#程序设计工程教程〔二〕函数成员C#类的函数成员主要包括方法、属性、索引器、事件、运算符、构造函数和析构函数。classClass1{staticvoidMain(string[]args){ TestT1=newTest(100,200); T1.x=40; //引用实例字段方法:实例名.实例字段名 Testt=0; //引用静态字段方法:类名.静态字段名 intz=T1.y; //引用只读字段 z=TMax; //引用常量}}C#程序设计工程教程〔二〕函数成员C#类的函数成47C#程序设计工程教程〔三〕类成员访问修饰符所有类成员都具有可访问性级别,可通过访问修饰符来控制类成员的可访问范围,以实现数据和代码的隐藏。C#定义了如下五种访问修饰符,其含义如下表所示。C#程序设计工程教程〔三〕类成员访问修饰符所有类48C#程序设计工程教程三、对象C#中的类是抽象的,如果要使用类来实现某项特定功能,必须要将类实例化,既创立类的对象。这里读者可以将类理解为生产产品时用到的模具,而对象就是生产出来的产品。〔一〕创立对象在类中创立对象的格式如下:<对象名>=new<构造方法名>([参数列表]);为Phone类创立一个对象Nokia,代码如下:PhoneNokia=newPhone();在C#面向对象程序设计语言中,创立类的对象、创立类的实例和实例化类等说法含义相同,都是以类为模板生成一个类对象。在使用关键字new创立一个类的对象时,将为对象分配一块内存,每一个对象都有不同的内存,因此,两个不同的对象,即使他们的代码都相同,也是单独的两个个体。C#程序设计工程教程三、对象C#中的类是抽象的,如49C#程序设计工程教程〔二〕使用对象在C#中,类对象使用点运算符“.〞来引用类中成员,并且引用的范围受成员的访问修饰符的限制。classclass1 //定义一个类class1{publicstringstr; //定义字符型公共变量strprotectedstringstr1; //定义字符型受保护变量str1privatestringstr2; //定义字符型私有变量str2internalstringstr3; //定义字符型内部变量str3publicvoidway() //定义一个没有任何返回类型的公共方法

way{……}}classclass2{publicstaticvoidMain(){class1dx=newclass1(); //创立一个class1的对象dxdx.str="a"; //此条语句正确,在程序内能引用public成员//dx.str1="b"; //此条语句错误,在类外不能引用protected成员//dx.str2="c"; //此条语句错误,在类外不能引用private成员dx.str3="d"; //此条语句正确,在程序内能引用internal成员dx.way(); //此条语句正确,在程序内能引用public成员}}C#程序设计工程教程〔二〕使用对象在C#中,类对50C#程序设计工程教程任务实施——获取品牌信息使用“类与对象〞的相关知识创立应用程序,在程序中完成类的建模,并根据类生成新的对象,根据用户输入的品牌名称,输出相应信息。任务说明实施步骤步骤1新建一个控制台应用程序,将其命名为Phone,在文件中输入创立类与对象的代码,如【代码7-1】所示。C#程序设计工程教程任务实施——获取品牌信息使51C#程序设计工程教程【代码7-1】创立类与对象。namespacePhone{publicclass //创立一个“〞类{publicstring品牌;publicstring型号;publicstring颜色;publicdecimal价格;}class移动 //创立一个移动类{publicvoid1() //定义一个方法“1〞{1=new(); //创立一个新的对象“1〞1.品牌="NOKIA“;1.型号="N98";1.颜色="黑色“;1.价格=4999;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+1.品牌);Console.WriteLine("型号:"+1.型号);Console.WriteLine("颜色:"+1.颜色);Console.WriteLine("价格:"+1.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}C#程序设计工程教程【代码7-1】创立类与对象。52C#程序设计工程教程publicvoid2() //定义一个方法“2〞{2=new();//创立一个新的对象“2〞2.品牌="MOTO“;2.型号="MOTOME525";2.颜色="红色“;2.价格=1989;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+2.品牌);Console.WriteLine("品牌:"+2.型号);Console.WriteLine("型号:"+2.颜色);Console.WriteLine("颜色:"+2.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}publicvoid3() //定义一个方法“3〞{3=new();//创立一个新的对象“3〞3.品牌="联想“;3.型号="联想E268翻盖";3.颜色="珍珠白“;3.价格=1399;Console.WriteLine("您选择的信息如下:");Console.WriteLine("品牌:"+3.品牌);Console.WriteLine("型号:"+3.型号);Console.WriteLine("颜色:"+3.颜色);Console.WriteLine("价格:"+3.价格);Console.WriteLine("谢谢您的参与!");Console.ReadKey();}C#程序设计工程教程publicvoid2()53C#程序设计工程教程staticvoidMain(string[]args){Console.WriteLine("请输入品牌名称:NOKIA、MOTO、Lenovo");stringinput=Console.ReadLine();移动Mobile=new移动();switch(input){case"NOKIA":Mobile.1();break;case"MOTO":Mobile.2();break;case"Lenovo":Mobile.3();break;default:Console.WriteLine("请输入正确的品牌名称!");Console.ReadKey();break;}}}}C#程序设计工程教程staticvoidMain(st54C#程序设计工程教程步骤2按【F5】键,调试程序,得到如以下图所示的运行结果。C#程序设计工程教程步骤2按【F5】键,调试程序,得到如55C#程序设计工程教程任务二深入学习类的成员任务说明本任务中将学习类中较难理解的一些概念。预备知识一、构造函数〔一〕构造函数的概念构造函数具有与类相同的名称,用于在创立对象时初始化对象。其声明格式如下:class类名称 //创立类{public类名称([参数列表])//创立构造函数{……}}C#程序设计工程教程任务二深入学习类的成员任务说明本任务56C#程序设计工程教程每个类都有构造函数,即使我们没有声明它,编译器也会自动为我们提供一个默认的构造函数。构造函数与普通方法的不同之处在于:构造函数的名称必须和类名完全相同。构造函数没有返回值,也不能用void来修饰。构造函数一般不能直接显式调用,在创立对象时系统会自动调用。C#程序设计工程教程每个类都有构造函数,即使我们没57C#程序设计工程教程〔二〕构造函数的重载在C#中,一个类可以有多个构造函数,其重载方法与普通方法相同,用户可以通过传递不同的参数来实现对不同类实例的初始化处理。〔三〕使用私有构造函数如果将构造函数声明为private类型,那么说明此类不允许其他类〔除了嵌套类〕创立该类的实例,通常只用于含有静态成员的类。〔四〕使用静态构造函数用关键字static声明的构造函数称为静态构造函数,当用户需要初始化一些静态变量的时就需要使用静态构造函数。静态构造函数只会执行一次,它是属于类的,而不是只属于某个实例。C#程序设计工程教程〔二〕构造函数的重载在C#中,一58C#程序设计工程教程类中的静态构造函数具有以下特点:既没有访问修饰符,也没有参数。在创立第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。用户不能直接调用静态构造函数且无法控制何时执行静态构造函数。一个类只能有一个静态构造函数,但可以同时拥有静态构造函数和实例构造函数。静态构造函数只能访问类的静态成员,不能访问实例成员。C#程序设计工程教程类中的静态构造函数具有以下特点:既59C#程序设计工程教程二、析构函数构造函数的功能是在创立对象时将对象初始化。析构函数与构造函数的功能正好相反,它用来释放一个对象所占用的内存。析构函数的名称由类名前加上“~〞字符构成,声明格式如下:class类名{~类名()//声明析构函数{......}}析构函数具有以下几个特征:

没有返回值,没有修饰符,也没有参数一个类只能有一个析构函数

不能继承或重载析构函数

不能显式调用析构函数,它们是系统自动调用的C#程序设计工程教程二、析构函数构造函数的功能是在创60C#程序设计工程教程三、this关键字关键字this有两种根本的用法:一是访问当前类成员,二是在声明构造函数时指定需要先执行的构造函数。〔一〕访问当前类成员在使用this关键字访问当前类成员时要注意以下两点:this是类中隐含的引用变量,它是被自动被赋值的,可以使用但不能被修改。类的静态成员不是某个对象的一局部,因此,在静态方法中引用this关键字是错误的。C#程序设计工程教程三、this关键字关键字this61C#程序设计工程教程〔二〕this用于构造函数声明在C#构造函数中,可以使用如下的形式来声明构造函数:<访问修饰符>类名(形式参数表):this(实际参数表){//语句块}其中this表示该类本身所声明的、形式参数表与实际参数表最匹配的另一个实例构造函数,这个构造函数会在执行正在声明的构造函数之前执行。C#程序设计工程教程〔二〕this用于构造函数声明在C#构造62C#程序设计工程教程classM //定义M类{publicM(intn) //声明一个关键字的构造函数{Console.WriteLine("M.M(intn)");}publicM(strings,intn):this(0) //声明两个关键字的构造函数{Console.WriteLine("M.M(strings,intn)");}}classTest //定义Test类{staticvoidMain(){Ma=newM("MClass",1); //定义实例对象aConsole.ReadKey();}}C#程序设计工程教程classM //定义M类63C#程序设计工程教程四、属性为防止在对象不知道的情况下私有字段被更改,C#中提出了属性的概念,其定义的形式为:访问修饰符数据类型标识符{//访问器声明;}访问器有get访问器和set访问器两种,其声明的格式如下:get{return要访问的成员;}set{要设置值的成员=value;}value是C#的关键字,是进行属性操作时set的隐含参数。C#程序设计工程教程四、属性为防止在对象不知道的情64C#程序设计工程教程属性提供了两种访问操作:get和set〔至少应包括其中的一个〕。当读取属性时,执行get访问器的代码块;当向属性分配一个新值时,执行set访问器的代码块。不

温馨提示

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

评论

0/150

提交评论