版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章面向对象基础《C#程序设计基础入门教程(第3版)》学习目标/Target理解面向对象的概念,能够说出面向对象的特征。
掌握类的定义及对象的创建,能够根据程序需求实现类的定义与对象的创建。掌握构造方法的定义与使用,能够定义构造方法,并使用不同的构造方法创建对象。掌握关键字this的用法,能够使用关键字this访问类的成员,解决类的成员与局部变量命名冲突问题。学习目标/Target掌握关键字static的用法,能够使用关键字static修饰类的成员,实现特定的需求。
熟悉嵌套类的用法,能够使用嵌套类实现特定的逻辑需求。了解匿名类,能够说出匿名类的概念与特点。掌握对象初始化器的用法,能够在创建对象时,使用对象初始化器为对象属性赋值。章节概述/SummaryC#是一门面向对象的程序设计语言,面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。了解面向对象的编程思想对于学习程序开发至关重要。在接下来的两章中,将为大家详细讲解如何使用面向对象的编程思想开发应用程序。目录/Contents010203面向对象的概念类与对象访问修饰符04构造方法05关键字this目录/Contents010203垃圾回收关键字static嵌套类04匿名类05对象初始化器面向对象的概念3.13.1面向对象的概念理解面向对象的概念,能够说出面向对象的特征。学习目标提到面向对象,自然会想到面向过程。面向过程是指分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用函数。面向对象则是把要解决的问题按照一定的规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。这样,当应用程序功能发生变动时,只需要修改个别的对象。由此可见,使用面向对象思想编写的程序具有良好的可移植性和可扩展性。3.1面向对象的概念3.1面向对象的概念面向对象的三大特征是封装性、继承性和多态性。封装性A继承性B多态性C3.1面向对象的概念封装性是面向对象的核心思想,将对象的特征和行为封装起来。外界不需要知道具体实现细节,这就是封装思想。1.封装性3.1面向对象的概念继承性主要描述的是类与类之间的关系。通过继承,程序员可以在不重新编写原有类的情况下,对原有类的功能进行扩展。在软件开发中,继承使软件具有开放性、可扩充性,这是数据组织和分类行之有效的方法,它简化了类和对象的创建,增强了代码的可重用性。2.继承性3.1面向对象的概念多态性是指同一操作作用于不同的对象会产生不同的执行结果。3.多态性类与对象3.2面向对象的编程思想旨在使程序对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想定义了两个概念,即类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中某类事物的个体。类与对象之间的关系如图。3.2类与对象3.2.1类与对象掌握类的定义及对象的创建,能够根据程序需求实现类的定义。学习目标类是对象的抽象概念,它用于描述一组对象的共同特征和行为。类中可以定义属性和方法,其中属性用于描述对象的特征,方法用于描述对象的行为。定义格式[访问修饰符]class类名{
成员}用于限定类的访问权限定义类的关键字类的标识符,其命名遵循标识符的命名规范类的成员包括字段、属性、方法、构造方法、事件等3.2.1类与对象例如,定义一个Person类,在该类中定义一个int类型的age字段表示年龄;定义一个Speak()方法,用于输出个人信息。根据上述要求定义的Person类如下所示。定义格式publicclassPerson{ publicintage; publicvoidSpeak(){ Console.WriteLine("大家好,我今年"+age+"岁!");}定义Person类,关键字public为访问修饰符,表示所有程序均可访问该类定义int类型的字段age定义Speak()方法3.2.1类与对象下面通过一个案例来学习如何在VisualStudio中定义一个类。在解决方案Chapter03中创建一个项目名为Program01的控制台应用程序,右击Program01项目→“添加”→“新建项”选项,在弹出的添加新项界面中选择“类”选项,将该类命名为Person.cs,如图。3.2.1类与对象在添加新项界面中单击右下方的“添加”按钮。Person.cs具体代码如例。具体代码namespaceProgram01{internalclassPerson{}}表示Person类只在当前项目中有效,其他项目无访问权限。3.2.1类与对象在Person类中,可以根据要求定义相应的字段和方法,定义完成之后的代码如下所示。具体代码namespaceProgram01{internalclassPerson{publicintage; publicvoidSpeak() {Console.WriteLine("大家好,我今年"+age+"岁!");} } }定义int类型的字段age定义Speak()方法3.2.1类与对象区分字段和局部变量在C#中,定义在类中的变量被称为字段,定义在方法中的变量被称为局部变量。C#允许在某一个方法中定义与字段同名的局部变量,此时在方法中通过变量名访问到的是局部变量,而非字段。具体代码PublicclassStudentpublicintage=10; publicvoidSpeak(){intage=60; Console.WriteLine("大家好,我今年"+age+"岁!");}}定义age字段在方法内部定义局部变量age3.2.1类与对象3.2.2对象的创建与使用掌握类的定义及对象的创建,能够根据程序需求完成对象的创建与使用。学习目标应用程序要想实现具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在C#程序中可以使用关键字new来创建对象,具体格式如下。类名对象名称=new类名();3.2.2对象的创建与使用例如创建Person类的实例,具体代码如下。Personp=newPerson();用于创建Person类的一个实例对象用于将Person对象在内存中的地址赋给变量p声明了一个Person类型的变量p为了便于描述,在后面章节中会将变量p引用的对象简称为p对象。内存中变量p和对象之间的引用关系如图。3.2.2对象的创建与使用具体代码在创建Person对象后,可以通过对象的引用来访问对象所有的成员。对象引用.对象成员3.2.2对象的创建与使用下面通过一个案例来学习如何访问对象的成员。在Program01项目的Program.cs文件中编写相应的逻辑代码,创建定义的Person对象,并通过Person对象访问其成员。具体代码如例。3.2.2对象的创建与使用点击查看运行程序,运行结果如图。3.2.2对象的创建与使用程序运行期间变量p1、p2引用的对象在内存中的状态不同类型字段的默认初始值如表。3.2.2对象的创建与使用字段类型初始值byte0short0int0long0Ldecimal0.0Mdouble0.0Dchar'\0'booleanfalse引用数据类型null当对象被实例化后,在程序中可以通过对象的引用来访问该对象的成员。需要注意的是,当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用。下面通过两段程序代码来分析对象是如何成为垃圾对象的。(1)第一段程序代码如下。3.2.2对象的创建与使用程序代码{ Personp1=newPerson();…}(2)第二段程序代码。3.2.2对象的创建与使用点击查看运行程序,运行结果如图。3.2.2对象的创建与使用从上图中可以看出,控制台只输出了一次“Welcometoitcast!”,第二次调用Say()方法时,程序抛出异常,如图。在C#中,null是一种特殊的常量,当一个变量的值为null时,则表示该变量不指向任何一个对象,即被变量p2所引用的Person类的对象失去引用,成为垃圾对象,其过程如图。3.2.2对象的创建与使用3.2.3属性掌握类的定义及对象的创建,能够根据程序需求完成属性的用法。学习目标通过前面的学习可知,在为字段赋值时不能进行有效的控制。例如,开发一个软件,用户注册时需要输入姓名和年龄,用户输入什么是我们无法控制的,例如年龄,用户可能会输入-30,这就不符合逻辑。3.2.3属性下面通过一个案例演示这种不符合逻辑的情况。在解决方案Chapter03中创建一个项目名为Program03的控制台应用程序,在Program03项目中添加一个Student类,在Student类中定义两个字段name和age,分别表示姓名和年龄;定义一个方法Show(),用于输出姓名和年龄。Student类的具体定义如例。3.2.3属性点击查看在Program03项目的Program.cs文件中编写逻辑代码,创建Student类的对象,通过对象设置name字段和age字段,并调用Show()方法输出两个字段的值。具体代码如例。3.2.3属性点击查看运行程序,根据提示输入姓名和年龄,运行结果如图。3.2.3属性根据属性是否有get访问器和set访问器,可以将属性分为以下3种。读写属性A只读属性B只写属性C3.2.3属性读写属性即同时拥有get访问器、set访问器的属性。3.2.3属性1.读写属性语法格式public[数据类型][属性名]{get{//返回参数值}set{//设置隐式参数value给字段赋值}}get访问器用于获取字段值,通常直接使用return语句返回字段即可。set访问器用于设置字段的值,在设置字段时,C#提供了一个隐式的value参数,通过value为字段赋值。只读属性即只有get访问器的属性。3.2.3属性2.只读属性语法格式public[数据类型][属性名]{get{//返回参数值}}只写属性即只有set访问器的属性。3.2.3属性3.只写属性语法格式public[数据类型][属性名]{set{//设置隐式参数value给字段赋值}}下面修改Program03项目,为Student类定义属性,合理控制年龄的输入。在解决方案Chapter03中创建一个项目名为Program04的控制台应用程序,在Program04项目中添加Student类,该类定义如例。点击查看3.2.3属性3.只写属性接下来在Program04项目的Program.cs文件中编写逻辑代码,具体代码如例。点击查看3.2.3属性3.只写属性运行程序,根据提示输入姓名和年龄,当输入不合理的年龄时,运行结果如图。3.2.3属性3.只写属性访问修饰符3.3在C#中,访问修饰符共有4种,分别是public、protected、internal、private,使用这4种访问修饰符可以组成5个可访问级别,具体如下。3.3访问修饰符1public:protected:最高访问级别,访问不受限制。2保护访问级别,受保护的成员可由自身及派生类访问。internal:3内部访问级别,只有在同一程序集中,内部类型或者成员才可访问。protectedinternal:4内部保护级别,访问仅限于当前程序集,可由自身及派生类访问。private:5私有访问,最低访问级别,私有成员只有在声明它们的类和结构中才可访问。访问修饰符除了可以修饰类和方法,还可以修饰字段、属性、索引器,但不可以修饰命名空间、局部变量、方法参数。构造方法3.43.4构造方法由前面所学的知识可知,实例化一个类的对象后,如果要给这个对象的属性赋值,需要直接访问该对象的属性,如果想要在实例化对象的同时为这个对象的属性赋值,可以通过构造方法来实现。构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用,为对象开辟内存空间,并对类中的成员进行初始化。本节将对构造方法进行详细讲解。3.4.1构造方法的定义掌握构造方法的定义与使用,能够完成构造方法的定义。学习目标如果在一个类中定义的方法同时满足以下3个条件,该方法便是一个构造方法。3.4.1构造方法的定义010203123方法名与类名相同。方法名的前面没有返回值类型的声明。方法中没有使用return语句返回一个值。下面通过一个案例演示如何在类中定义构造方法。定义一个自行车类Cycle,Cycle类定义了一个无参构造方法。在解决方案Chapter03中创建一个项目名为Program05的控制台应用程序,具体代码如例。点击查看3.4.1构造方法的定义运行程序,运行结果如图。3.4.1构造方法的定义在一个类中可以定义无参的构造方法,也可以定义有参的构造方法,通过有参的构造方法就可以实现对属性的赋值。下面对Program05\Program.cs中的代码进行改写,在Cycle类中定义一个属性Wheels,表示轮子数量,再定义一个有参构造方法,在构造方法中,根据轮子的数量,判断制造了一辆何种类型的自行车。改写后的代码如例。点击查看3.4.1构造方法的定义运行程序,运行结果如图。3.4.1构造方法的定义3.4.2构造方法的重载掌握构造方法的定义与使用,能够完成构造方法的重载。学习目标与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,可以通过调用不同的构造方法来为不同的属性赋值。3.4.2构造方法的重载下面通过一个案例来学习构造方法的重载。假设有一个毛绒玩具店,可以根据客户需求定制毛绒玩具,无论客户是想定制小狗毛绒玩具,还是想拥有蓝色眼睛的小猫毛绒玩具,店家都可以根据客户需求完成毛绒玩具的制作。在该案例中,可以将毛绒玩具抽象为一个类,在类中定义多个构造方法以满足客户的不同需求。3.4.2构造方法的重载在解决方案Chapter03中创建一个项目名为Program07的控制台应用程序,在Program07项目中定义毛绒玩具类PlushToy,该类具体定义如例。点击查看3.4.2构造方法的重载接下来在Program07项目的Program.cs文件中编写逻辑代码,开始毛绒玩具的定制与制作,具体代码如例。点击查看3.4.2构造方法的重载运行程序,运行结果如图。3.4.2构造方法的重载(1)C#中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,其方法体中没有任何代码,即什么也不做。下面两种写法效果是一样的。使用默认构造方法的注意事项第一种写法:publicclassPerson{}第二种写法:publicclassPerson{ publicPerson(){}}3.4.2构造方法的重载由于系统提供的构造方法往往不能满足需求,因此,可以自己在类中定义构造方法,一旦为该类定义了构造方法,系统就不再提供默认的构造方法了,具体代码如下所示。使用默认构造方法的注意事项publicclassPerson{intage;publicPerson(intx){age=x;}}上面的Person类中定义了一个对字段赋初始值的构造方法,该构造方法有一个参数,这时系统不再提供默认的构造方法。3.4.2构造方法的重载下面再编写一个测试程序调用上面的Person类,示例代码如下。使用默认构造方法的注意事项publicclassProgram{publicstaticvoidMain(string[]args){Personp=newPerson(); //实例化Person对象
}}编译程序报错3.4.2构造方法的重载使用默认构造方法的注意事项声明构造方法时,可以使用关键字private吗?3.4.2构造方法的重载运行下面的代码,看看会出现什么结果。使用默认构造方法的注意事项publicclassProgram{publicstaticvoidMain(string[]args){Personp=newPerson();}}publicclassPerson{
privatePerson(){Console.WriteLine("调用无参的构造方法");}}3.4.2构造方法的重载编译程序报错,结果如图。使用默认构造方法的注意事项程序在编译时出现了错误,错误提示为“Person.Person()”不可访问。这是由于关键字private修饰的构造方法Person()是私有的,不可以被外界调用,只能在Person类中被访问,即无法在类的外部创建该类的实例对象。因此,为了方便实例化对象,通常会使用关键字public来修饰构造方法。3.4.2构造方法的重载关键字this3.53.5关键字this掌握关键字this的用法,能够使用关键字this访问类的成员,解决类的成员与局部变量命名冲突问题。学习目标在Program07\PlushToy.cs中,构造方法中使用的参数名称与属性名称不同,如name和Name、coat_color和CoatColor、eye_color和EyeColor,这样的程序可读性很差。最好将一个类中表示相同含义的变量统一命名,例如名称都声明为Name,身体颜色都声明为CoatColor,眼睛颜色都声明为EyeColor。但是这样做又会导致属性和局部变量的名称冲突,在方法中将无法访问属性。3.5关键字this为了解决上述问题,C#中提供了一个关键字this,用于表示对当前实例的引用。下面分3种情况来讲解关键字this在程序中的用法。3.5关键字thisthis访问属性Athis调用成员方法Bthis调用构造方法C通过关键字this可以明确地访问一个类的属性,解决属性名称与局部变量名称冲突的问题。下面通过一个案例演示如何使用关键字this访问类的属性,在该案例中,定义一个学生类Student,在Student类中定义学生姓名Name、学生年龄Age、学生性别Gender,并定义具有3个参数的构造方法,以及输出学生信息的方法。3.5关键字this1.This访问属性在解决方案Chapter03中创建一个项目名为Program08的控制台应用程序,在Program08项目中添加类Student,具体代码如例。1.This访问属性点击查看3.5关键字this接下来在Program08项目的Program.cs文件中编写逻辑代码,创建Student类的对象并进行初始化,然后通过Student类的对象调用Show()方法输出学生信息,具体代码实现如例。1.This访问属性点击查看3.5关键字this运行程序,运行结果如图。1.This访问属性3.5关键字this通过关键字this可以明确地访问一个类的属性,解决属性名称与局部变量名称冲突的问题。下面通过一个案例演示如何使用关键字this访问类的属性,在该案例中,定义一个学生类Student,在Student类中定义学生姓名Name、学生年龄Age、学生性别Gender,并定义具有3个参数的构造方法,以及输出学生信息的方法。3.5关键字this2.This调用成员方法下面修改Program08\Student.cs,在解决方案Chapter03中创建一个项目名为Program09的控制台应用程序,在Program09项目中添加Student类,具体代码如例。点击查看3.5关键字this2.This调用成员方法接下来在Program09项目的Program.cs文件中编写逻辑代码,创建Student类的对象并进行初始化,然后通过Student类的对象调用Show()方法输出学生信息,具体代码实现如例。点击查看3.5关键字this2.This调用成员方法运行程序,运行结果如图。3.5关键字this2.This调用成员方法构造方法是在创建类对象时自动调用的,但创建类对象会有多种情况,例如,在软件安装完成之后,通常会进行各种配置,如设置用户名、设置密码、选择主题、填写个人爱好等。有的用户在配置时,可能只填写了用户名和密码,其他均是默认;而有的用户会根据自己的喜好逐一完成各种配置。3.5关键字this3.This调用构造方法如果把配置界面抽象为一个类,那么在设计构造方法时就需要设计多个构造方法,以创建不同种类的配置对象,即满足不同用户的配置需求。3.5关键字this3.This调用构造方法下面通过具体代码实现上述场景。在解决方案Chapter03中创建一个项目名为Program10的控制台应用程序,在Program10项目中添加一个配置界面类Configuration,具体代码如例。点击查看3.5关键字this3.This调用构造方法接下来在Program10项目的Program.cs文件中编写逻辑代码,模拟两个用户,用户1只进行用户名和密码的配置,用户2进行全部的配置,然后用户1和用户2分别调用Show()方法输出配置信息。具体代码如例。点击查看3.5关键字this3.This调用构造方法运行程序,运行结果如图。3.5关键字this3.This调用构造方法用户2在调用4个参数的构造方法之前,调用了两个参数的构造方法,表明Configuration类中通过关键字this成功调用了其他构造方法。垃圾回收3.63.6垃圾回收了解垃圾回收机制,能够说出使用析构函数回收垃圾的过程。学习目标为了回收不再使用的对象,C#提供了析构方法,析构方法与构造方法一样,是类的特殊成员,其作用是在程序结束或对象使用完毕后释放非托管资源,如局部变量。析构方法的名称和类名相同,没有返回值类型,没有参数,方法名前面有一个“~”符号。定义格式类{ //其他成员 ~析构方法名();}3.6垃圾回收析构方法具有以下特点。1自动调用:不可重载:析构方法会在对象被回收之前自动调用,编程人员不需要手动调用析构方法。2析构方法不能被重载。不能被继承:3析构方法不能被子类继承或覆盖。不保证调用顺序:4析构方法的调用顺序在运行时是不确定的,尤其是当对象作为引用的一部分存在于集合中时。不能被实例化对象调用:5析构方法是由C#的垃圾回收机制自动调用的,不能直接通过实例对象来调用它。3.6垃圾回收如果类中没有显式地定义析构方法,系统会提供一个默认的析构方法。析构方法的调用需要依靠C#的垃圾回收机制,因此在程序运行时,析构方法的调用时间并不确定。如果想要立即回收垃圾对象,可以调用C#垃圾回收器(GC)提供的Collect()方法,通知.NET运行环境回收垃圾。需要注意的是,GC.Collect()方法只是起到通知作用,垃圾回收器是否回收垃圾,是由.NET运行环境决定的。3.6垃圾回收下面通过一个案例演示C#中的垃圾回收,在该案例中,定义一个手机类Phone,Phone类有两个属性Name和Memory,分别表示手机的品牌和内存大小。在生产手机时需要指定这两个属性,即需要在Phone类中定义包含这两个参数的构造方法。此外,定义一个析构方法,在手机使用寿命结束时回收手机。3.6垃圾回收在解决方案Chapter03中创建一个项目名为Program11的控制台应用程序,在Program11项目中添加一个Phone类,具体代码如例。点击查看3.6垃圾回收接下来在Program11项目的Program.cs文件中编写逻辑代码,创建两个手机对象,将其中一个对象置为null,然后调用GC.Collect()方法回收垃圾,具体代码如例。点击查看3.6垃圾回收运行程序,运行结果如图。3.6垃圾回收关键字static3.73.7关键字static在C#中定义了一个关键字static,它用于修饰类、字段、属性、方法和构造方法等。被关键字static修饰的类称为静态类,被关键字static修饰的成员称为静态成员。静态成员包括静态字段、静态属性、静态方法、静态类、静态构造方法。本节将对关键字static的各种用法进行详细讲解。3.7.1静态字段掌握关键字static的用法,能够通过案例演示如何访问静态字段。学习目标有时候希望某些特定的数据在内存中只有一份,并且可以被类的所有实例对象所共享。例如,某个学校的所有学生共享一个学校名称,此时完全不必在每个学生对象所占用的内存空间中都定义一个字段来存储这个学校名称,可以定义一个让所有对象共享的静态字段来表示学校名称。静态字段是被关键字static修饰的字段,它不属于任何对象,只属于类,而且只能通过“类名.静态字段名”的方式访问。3.7.1静态字段为了帮助读者更好地理解静态字段,下面通过一个案例来演示如何访问静态字段。在该案例中定义一个学生类Student,在Student类中定义一个属性Name表示学生姓名,再定义一个静态字段schoolName表示学校名称。在创建Student类对象之后,输出学生信息,包括学生姓名和学校名称。3.7.1静态字段在解决方案Chapter03中创建一个项目名为Program12的控制台应用程序,具体代码如例。点击查看3.7.1静态字段运行程序,运行结果如图。3.7.1静态字段注意Student.schoolName="School";无论创建多少个Student对象,静态字段schoolName的值都不会改变,要想改变静态字段的值,只有通过“类名.静态字段名”的方式调用静态字段并为其重新赋值,示例代码如下。这样Student类的静态字段schoolName的值就变成了“School”。3.7.1静态字段3.7.2静态属性掌握关键字static的用法,能够通过案例演示如何使用静态属性。学习目标使用static修饰的属性被称为静态属性,静态属性可以读写静态字段的值,并保证静态字段值的合法性。在调用静态属性时需要使用“类名.静态属性名”的方式。3.7.2静态属性下面通过修改Program12\Program.cs来演示如何使用静态属性。在解决方案Chapter03中创建一个项目名为Program13的控制台应用程序,具体代码如例。点击查看3.7.2静态属性运行程序,运行结果如图。3.7.2静态属性3.7.3静态方法掌握关键字static的用法,能够通过案例演示如何使用静态方法。学习目标有时希望在不创建对象的情况下调用某个方法,也就是使该方法不必和对象绑定在一起。要实现这样的效果,只需要在类中定义的成员方法前加上关键字static,这种方法被称为静态方法。同其他静态成员类似,静态方法使用“类名.方法名”的方式来调用。3.7.3静态方法下面通过修改Program14\Program.cs来演示静态方法的用法。假设要输出学校信息,由于学校信息是公共的,不需要创建学生对象也可以访问,因此可以在Student类中定义静态方法Show(),用于显示学校信息。在解决方案Chapter03中创建一个项目名为Program14的控制台应用程序,具体代码如例。点击查看3.7.3静态方法运行程序,运行结果如图。3.7.3静态方法3.7.4静态类掌握关键字static的用法,能够通过案例演示如何使用静态类。学习目标当类中的成员全部是静态成员时,就可以把这个类声明为静态类。声明静态类时需要在关键字class前加上关键字static。静态类不能创建实例对象,只能通过类名访问其静态成员。3.7.4静态类假如定义一个学校类School用于保存学校信息,School类中的成员如学校名称(name)、学校位置(position)等都声明为静态成员,则School类可以声明为静态类。在解决方案Chapter03中创建一个项目名为Program15的控制台应用程序,具体代码如例。点击查看3.7.4静态类运行程序,运行结果如图。3.7.4静态类3.7.5静态构造方法掌握关键字static的用法,能够通过案例演示如何使用静态构造方法。学习目标静态构造方法的作用是对静态成员进行赋值。一个类只能有一个静态构造方法,该静态构造方法没有任何修饰符,也没有参数,可以被定义在静态类或非静态类中。用户无法像使用普通构造方法那样直接使用静态构造方法,静态构造方法会在程序创建第一个实例或引用任何静态成员之前,完成类中静态成员的初始化。3.7.5静态构造方法示例下面通过修改Program12\Program.cs来演示如何使用静态构造方法。在Student类中定义一个静态构造方法对schoolName进行初始化,定义一个普通构造方法对学生姓名进行初始化,定义一个输出学生信息的Show()方法。在Main()方法中创建Student类对象,通过对象调用Show()方法输出学生信息。3.7.5静态构造方法。在解决方案Chapter03中创建一个项目名为Program16的控制台应用程序,具体代码如例。点击查看3.7.5静态构造方法运行程序,运行结果如图。3.7.5静态构造方法3.7.6单例模式掌握关键字static的用法,能够通过案例演示如何使用单例模式。学习目标单例模式是C#中的一种设计模式,它是指在设计一个类时,需要保证整个程序在运行期间只存在一个实例对象。例如,开发一款软件,在软件使用过程中,需要记录用户的行为、错误信息等日志,在记录日志时要保证所有日志都保存到同一个文件,此时,就可以使用单例模式实现一个日志记录器。3.7.6单例模式下面结合日志记录器,讲解单例模式设计的核心步骤,具体如下所示。1定义日志记录器类:私有化构造方法:这个类负责所有日志的记录工作。2定义私有化构造方法,防止外部直接实例化这个类。提供静态方法获取实例:3在类外部调用该静态方法获取类的实例。3.7.6单例模式在解决方案Chapter03中创建一个项目名为Program17的控制台应用程序,然后在该项目中创建一个日志类Log,将Log类设计为单例模式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个性化推送式广告制作规范
- 华为公司战略布局顾问面试全解析
- 制造业生产技术部总经理的生产效率提升策略
- 制造业生产经理的招聘与选拔经验
- 政府采购专家评审团成员的选拔与培训经验
- 现代办公场所绿色改造及维护策略
- 首创科技公司行政主管的年度工作计划
- 介绍自己的物品作文
- 航空航天企业工程师面试技巧
- 京東電商平台數據分析的關鍵成功因素
- 公共关系:理论、实务与技巧(第9版) 课件 第1章 公共关系概论
- 劳动课行李箱收纳课件
- 跨境网店运营(第2版 慕课版)课件全套 蔡文芳 模块1-8 前期准备工作 -店铺财务管理
- 儿科静脉用药调配课件
- 2025至2030年中国高端餐饮行业市场全景调研及投资规划建议报告
- 社交焦虑认知干预-洞察及研究
- 公物仓管理办法
- 华为税务管理办法
- 华为投资管理办法
- 2024年公务员多省联考《申论》题(湖南行政执法卷)试题及答案解析
- 分级授权式管理办法
评论
0/150
提交评论